অ্যাপ ম্যানিফেস্ট ওভারভিউ

প্রতিটি অ্যাপ প্রোজেক্টে প্রোজেক্ট সোর্স সেট-এর রুটে অবশ্যই একটি AndroidManifest.xml ফাইল থাকতে হবে, যার নাম ঠিক সেটাই হতে হবে। ম্যানিফেস্ট ফাইল Android বিল্ড টুল, Android অপারেটিং সিস্টেম এবং Google Play-তে আপনার অ্যাপ সম্পর্কে প্রয়োজনীয় তথ্য বর্ণনা করে।

অন্যান্য অনেক কিছুর মধ্যে, নিম্নলিখিতগুলি ঘোষণা করার জন্য ম্যানিফেস্ট ফাইল প্রয়োজন:

  • অ্যাপের কম্পোনেন্ট, যার মধ্যে সব অ্যাক্টিভিটি, পরিষেবা, সম্প্রচার রিসিভার এবং কন্টেন্ট প্রোভাইডার অন্তর্ভুক্ত। প্রতিটি কম্পোনেন্টকে অবশ্যই Kotlin বা Java ক্লাসের নামের মতো মৌলিক প্রপার্টি সংজ্ঞায়িত করতে হবে। এছাড়াও, এটি কোন কোন ডিভাইস কনফিগারেশন ম্যানেজ করতে পারে এবং কম্পোনেন্ট কীভাবে শুরু করা যেতে পারে তা বর্ণনা করে এমন ইনটেন্ট ফিল্টারের মতো ক্ষমতা ঘোষণা করতে পারে। নিচের বিভাগে অ্যাপ কম্পোনেন্ট সম্পর্কে আরও পড়ুন।
  • সিস্টেম বা অন্যান্য অ্যাপের সুরক্ষিত অংশ অ্যাক্সেস করার জন্য অ্যাপটির যে অনুমতি প্রয়োজন। এছাড়াও, এই অ্যাপ থেকে কন্টেন্ট অ্যাক্সেস করতে চাইলে, অন্যান্য অ্যাপের কাছে যেসব অনুমতি থাকতে হবে, সেগুলিও উল্লেখ করে। পরবর্তী বিভাগে অনুমতি সম্পর্কে আরও পড়ুন।
  • অ্যাপের জন্য প্রয়োজনীয় হার্ডওয়্যার ও সফ্টওয়্যার ফিচার, যা কোন কোন ডিভাইস Google Play থেকে অ্যাপ ইনস্টল করতে পারবে তা প্রভাবিত করে। নিচের বিভাগে ডিভাইসের কম্প্যাটিবিলিটি সম্পর্কে আরও পড়ুন।

আপনি যদি অ্যাপ তৈরি করার জন্য Android Studio ব্যবহার করেন, তাহলে আপনার জন্য ম্যানিফেস্ট ফাইল তৈরি করা হয় এবং আপনার অ্যাপ তৈরি করার সময় বেশিরভাগ প্রয়োজনীয় ম্যানিফেস্ট এলিমেন্ট যোগ করা হয়, বিশেষ করে কোড টেমপ্লেট ব্যবহার করার সময়।

ফিচার ফাইল করুন

আপনার অ্যাপের কিছু সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য কীভাবে ম্যানিফেস্ট ফাইলে প্রতিফলিত হয় তা নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে।

অ্যাপ কম্পোনেন্ট

আপনার অ্যাপে তৈরি করা প্রতিটি অ্যাপ কম্পোনেন্টের জন্য, ম্যানিফেস্ট ফাইলে সংশ্লিষ্ট XML এলিমেন্ট ঘোষণা করুন:

ম্যানিফেস্ট ফাইলে উল্লেখ না করে আপনি যদি এইসব কম্পোনেন্টের কোনও সাবক্লাস তৈরি করেন, তাহলে সিস্টেম সেটি চালু করতে পারবে না।

সম্পূর্ণ প্যাকেজ ডেজিগনেশন ব্যবহার করে, name অ্যাট্রিবিউটের মাধ্যমে আপনার সাবক্লাসের নাম উল্লেখ করুন। যেমন, একটি Activity সাবক্লাস এইভাবে ঘোষণা করা হয়:

<manifest ... >
    <application ... >
        <activity android:name="com.example.myapp.MainActivity" ... >
        </activity>
    </application>
</manifest>

তবে, name ভ্যালুর প্রথম অক্ষরটি যদি একটি পিরিয়ড হয়, তাহলে অ্যাপের নেমস্পেস, মডিউল-লেভেল build.gradle ফাইলের namespace প্রপার্টি থেকে, নামের আগে প্রিফিক্স হিসেবে যোগ করা হয়। যেমন, নেমস্পেস যদি "com.example.myapp" হয়, তাহলে নিম্নলিখিত অ্যাক্টিভিটির নাম com.example.myapp.MainActivity-এ রিজলভ হয়:

<manifest ... >
    <application ... >
        <activity android:name=".MainActivity" ... >
            ...
        </activity>
    </application>
</manifest>

প্যাকেজের নাম বা নেমস্পেস সেট করা সম্পর্কে আরও তথ্যের জন্য, নেমস্পেস সেট করুন দেখুন।

আপনার যদি সাব-প্যাকেজে থাকা অ্যাপ কম্পোনেন্ট থাকে, যেমন com.example.myapp.purchases, তাহলে name ভ্যালুতে অবশ্যই বাদ পড়া সাব-প্যাকেজের নাম যোগ করতে হবে, যেমন ".purchases.PayActivity", অথবা সম্পূর্ণভাবে উপযুক্ত প্যাকেজের নাম ব্যবহার করতে হবে।

ইনটেন্ট ফিল্টার

অ্যাপ অ্যাক্টিভিটি, পরিষেবা ও ব্রডকাস্ট রিসিভার ইনটেন্ট-এর মাধ্যমে অ্যাক্টিভেট করা হয়। ইনটেন্ট হল এমন একটি মেসেজ যা Intent অবজেক্টের মাধ্যমে সংজ্ঞায়িত করা হয়। এটি সম্পাদন করার জন্য কোনও অ্যাকশন বর্ণনা করে, যার মধ্যে রয়েছে যে ডেটার উপর অ্যাকশন নেওয়া হবে, কম্পোনেন্টের যে বিভাগ অ্যাকশনটি সম্পাদন করবে বলে আশা করা হচ্ছে এবং অন্যান্য নির্দেশাবলী।

কোনও অ্যাপ সিস্টেমে ইনটেন্ট ইস্যু করলে, সিস্টেম এমন একটি অ্যাপ কম্পোনেন্ট খুঁজে বের করে যা প্রতিটি অ্যাপের ম্যানিফেস্ট ফাইলে ইনটেন্ট ফিল্টার ঘোষণার উপর ভিত্তি করে ইনটেন্ট ম্যানেজ করতে পারে। সিস্টেমটি ম্যাচিং কম্পোনেন্টের একটি ইনস্ট্যান্স চালু করে এবং সেই কম্পোনেন্টে Intent অবজেক্টটি পাস করে। একাধিক অ্যাপ যদি ইনটেন্ট ম্যানেজ করতে পারে, তাহলে ব্যবহারকারী বেছে নিতে পারবেন যে কোন অ্যাপ ব্যবহার করা হবে।

অ্যাপ কম্পোনেন্টে যেকোনও সংখ্যক ইনটেন্ট ফিল্টার (<intent-filter> এলিমেন্ট দিয়ে সংজ্ঞায়িত) থাকতে পারে, যার প্রতিটি ওই কম্পোনেন্টের আলাদা আলাদা ক্ষমতা বর্ণনা করে।

আরও তথ্যের জন্য, ইনটেন্ট ও ইনটেন্ট ফিল্টার ডকুমেন্ট দেখুন।

আইকন ও লেবেল

সংশ্লিষ্ট অ্যাপ কম্পোনেন্টের জন্য ব্যবহারকারীদের ছোট আইকন ও টেক্সট লেবেল দেখানোর জন্য বেশ কিছু ম্যানিফেস্ট এলিমেন্টে যথাক্রমে icon ও label অ্যাট্রিবিউট থাকে।

প্রতিটি ক্ষেত্রে, পেরেন্ট এলিমেন্টে সেট করা আইকন এবং লেবেল সব চাইল্ড এলিমেন্টের জন্য ডিফল্ট icon এবং label ভ্যালু হয়ে যায়। যেমন, <application> এলিমেন্টে সেট করা আইকন ও লেবেল হল অ্যাপের প্রতিটি কম্পোনেন্টের ডিফল্ট আইকন ও লেবেল, যেমন সব অ্যাক্টিভিটি।

কোনও কম্পোনেন্টের <intent-filter> -এ সেট করা আইকন ও লেবেল ব্যবহারকারীকে দেখানো হয় যখনই সেই কম্পোনেন্টটি কোনও ইনটেন্ট পূরণ করার বিকল্প হিসেবে দেখানো হয়। ডিফল্ট হিসেবে, এই আইকনটি প্যারেন্ট কম্পোনেন্টের জন্য ঘোষিত যেকোনও আইকন থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয়, <activity> বা <application> এলিমেন্ট।

আপনি ইনটেন্ট ফিল্টারের জন্য আইকন পরিবর্তন করতে চাইতে পারেন, যদি এটি এমন একটি অনন্য অ্যাকশন প্রদান করে যা আপনি চুজারের ডায়ালগে আরও ভালোভাবে নির্দেশ করতে চান। আরও তথ্যের জন্য, অন্যান্য অ্যাপকে আপনার অ্যাক্টিভিটি শুরু করার অনুমতি দিন দেখুন।

অনুমতি

Android অ্যাপকে অবশ্যই ব্যবহারকারীর সংবেদনশীল ডেটা, যেমন পরিচিতি ও এসএমএস, অথবা নির্দিষ্ট সিস্টেম ফিচার, যেমন ক্যামেরা ও ইন্টারনেট অ্যাক্সেস করার অনুমতি চাইতে হবে। প্রতিটি অনুমতি একটি অনন্য লেবেল দ্বারা চিহ্নিত করা হয়। যেমন, এসএমএস মেসেজ পাঠাতে হবে এমন অ্যাপের ম্যানিফেস্টে নিম্নলিখিত লাইনটি থাকতে হবে:

<manifest ... >
    <uses-permission android:name="android.permission.SEND_SMS"/>
    ...
</manifest>

Android 6.0 (API লেভেল ২৩) থেকে শুরু করে, রানটাইমে ব্যবহারকারী কিছু অ্যাপের অনুমতি অনুমোদন বা বাতিল করতে পারবেন। তবে, আপনার অ্যাপ যে Android ভার্সনেই কাজ করুক না কেন, আপনাকে ম্যানিফেস্টে <uses-permission> এলিমেন্ট সহ সব অনুমতির অনুরোধ জানাতে হবে। অনুমতি দেওয়া হলে, অ্যাপটি সুরক্ষিত ফিচার ব্যবহার করতে পারবে। তা না হলে, সেইসব ফিচার অ্যাক্সেস করার চেষ্টা ব্যর্থ হয়।

আপনার অ্যাপও অনুমতির মাধ্যমে নিজের কম্পোনেন্ট সুরক্ষিত রাখতে পারে। এটি Android-এর দ্বারা নির্ধারিত যেকোনও অনুমতি ব্যবহার করতে পারে, যেমন android.Manifest.permission-এ তালিকাভুক্ত করা আছে অথবা অন্য কোনও অ্যাপে ঘোষিত অনুমতি। আপনার অ্যাপও নিজস্ব অনুমতি নির্ধারণ করতে পারে। <permission> এলিমেন্টের সাথে নতুন অনুমতি ঘোষণা করা হয়েছে।

আরও তথ্যের জন্য, Android-এ অনুমতি দেখুন।

মানানসই ডিভাইসের অভাব

এছাড়াও, ম্যানিফেস্ট ফাইলে আপনি উল্লেখ করতে পারেন যে আপনার অ্যাপের জন্য কোন ধরনের হার্ডওয়্যার বা সফ্টওয়্যার ফিচার প্রয়োজন এবং এর ফলে, আপনার অ্যাপ কোন ধরনের ডিভাইসের সাথে মানানসই। আপনার অ্যাপের জন্য প্রয়োজনীয় ফিচার বা সিস্টেম ভার্সন নেই এমন ডিভাইসে Google Play Store ব্যবহারকারীদের আপনার অ্যাপ ইনস্টল করতে দেয় না।

আপনার অ্যাপ কোন কোন ডিভাইসের সাথে মানানসই তা নির্ধারণ করার জন্য একাধিক ম্যানিফেস্ট ট্যাগ আছে। নিচে সবচেয়ে সাধারণ কিছু কারণ উল্লেখ করা হল।

<uses-feature>

<uses-feature> এলিমেন্ট আপনাকে অ্যাপের জন্য প্রয়োজনীয় হার্ডওয়্যার ও সফ্টওয়্যার ফিচার ঘোষণা করতে দেয়। যেমন, কম্পাস সেন্সর ছাড়া কোনও ডিভাইসে আপনার অ্যাপের প্রাথমিক কার্যকারিতা সম্পন্ন না হলে, আপনি নিম্নলিখিত ম্যানিফেস্ট ট্যাগের মাধ্যমে কম্পাস সেন্সরকে প্রয়োজনীয় হিসেবে ঘোষণা করতে পারেন:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

মনে রাখবেন: আপনি যদি Chromebook-এ আপনার অ্যাপ উপলভ্য করতে চান, তাহলে কিছু গুরুত্বপূর্ণ হার্ডওয়্যার এবং সফ্টওয়্যার ফিচার সংক্রান্ত সীমাবদ্ধতা বিবেচনা করতে হবে। আরও তথ্যের জন্য, Chromebook-এর জন্য অ্যাপ ম্যানিফেস্ট কম্প্যাটিবিলিটি দেখুন।

<uses-sdk>

প্রতিটি নতুন প্ল্যাটফর্ম ভার্সনে প্রায়ই নতুন API যোগ করা হয় যা আগের ভার্সনে উপলভ্য থাকে না। আপনার অ্যাপের সাথে মানানসই ন্যূনতম ভার্সন উল্লেখ করতে, আপনার ম্যানিফেস্টে অবশ্যই <uses-sdk> ট্যাগ এবং এর minSdkVersion অ্যাট্রিবিউট থাকতে হবে।

তবে, মনে রাখবেন যে <uses-sdk> এলিমেন্টের অ্যাট্রিবিউট build.gradle ফাইলের সংশ্লিষ্ট প্রপার্টি ওভাররাইড করে। তাই, আপনি Android Studio ব্যবহার করলে, সেখানে minSdkVersion এবং targetSdkVersion ভ্যালু উল্লেখ করুন:

গ্ৰুভি

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 23

        // Specifies the API level used to test the app.
        targetSdkVersion 36
        ...
    }
}

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(23)

        // Specifies the API level used to test the app.
        targetSdkVersion(36)
        ...
    }
}

build.gradle ফাইল সম্পর্কে আরও জানতে, আপনার বিল্ড কীভাবে কনফিগার করবেন সেই সম্পর্কে পড়ুন।

বিভিন্ন ডিভাইসের জন্য আপনার অ্যাপের সাপোর্ট কীভাবে ঘোষণা করবেন সেই সম্পর্কে আরও জানতে, ডিভাইসের মানানসই হওয়া এক নজরে দেখুন।

ফাইল কনভেনশন

এই বিভাগে ম্যানিফেস্ট ফাইলের সব এলিমেন্ট ও অ্যাট্রিবিউটের ক্ষেত্রে সাধারণত প্রযোজ্য কনভেনশন ও নিয়ম সম্পর্কে বর্ণনা করা হয়েছে।

এলিমেন্ট
শুধুমাত্র <manifest> এবং <application> এলিমেন্ট প্রয়োজন। এগুলির প্রত্যেকটি শুধুমাত্র একবারই হতে হবে। অন্যান্য বেশিরভাগ এলিমেন্ট শূন্য বা তার বেশি বার থাকতে পারে। তবে, ম্যানিফেস্ট ফাইলটি উপযোগী করে তুলতে এর মধ্যে কিছু অবশ্যই উপস্থিত থাকতে হবে।

সব ভ্যালু অ্যাট্রিবিউটের মাধ্যমে সেট করা হয়, কোনও এলিমেন্টের মধ্যে ক্যারেক্টার ডেটা হিসেবে নয়।

একই লেভেলে থাকা এলিমেন্ট সাধারণত সাজানো থাকে না। যেমন, <activity>, <provider> এবং <service> এলিমেন্ট যেকোনও ক্রমে প্লেস করা যেতে পারে। এই নিয়মের দুটি গুরুত্বপূর্ণ ব্যতিক্রম আছে:

  • একটি <activity-alias> এলিমেন্টকে অবশ্যই <activity> অনুসরণ করতে হবে যার জন্য এটি একটি উপনাম।
  • <application> এলিমেন্টটি অবশ্যই <manifest> এলিমেন্টের ভিতরে শেষ এলিমেন্ট হতে হবে।
অ্যাট্রিবিউট
টেকনিক্যালি, সব অ্যাট্রিবিউটই ঐচ্ছিক। তবে, অনেক অ্যাট্রিবিউট অবশ্যই নির্দিষ্ট করতে হবে যাতে কোনও এলিমেন্ট তার উদ্দেশ্য পূরণ করতে পারে। সত্যিই ঐচ্ছিক অ্যাট্রিবিউটের জন্য, রেফারেন্স ডকুমেন্টেশন ডিফল্ট ভ্যালু নির্দেশ করে।

রুট <manifest> এলিমেন্টের কিছু অ্যাট্রিবিউট ছাড়া, সব অ্যাট্রিবিউটের নাম android: প্রিফিক্স দিয়ে শুরু হয়, যেমন android:alwaysRetainTaskState। প্রিফিক্সটি সর্বজনীন হওয়ার কারণে, নামের মাধ্যমে অ্যাট্রিবিউট উল্লেখ করার সময় ডকুমেন্টেশন সাধারণত এটি বাদ দেয়।

একাধিক ভ্যালু
একাধিক ভ্যালু উল্লেখ করা গেলে, এলিমেন্টটি প্রায় সবসময়ই রিপিট করা হয়, একটি এলিমেন্টের মধ্যে একাধিক ভ্যালু তালিকাভুক্ত করা হয় না। যেমন, ইনটেন্ট ফিল্টার একাধিক অ্যাকশন তালিকাভুক্ত করতে পারে:
<intent-filter ... >
    <action android:name="android.intent.action.EDIT" />
    <action android:name="android.intent.action.INSERT" />
    <action android:name="android.intent.action.DELETE" />
    ...
</intent-filter>
রিসোর্স ভ্যালু
কিছু অ্যাট্রিবিউটের এমন ভ্যালু থাকে যা ব্যবহারকারীদের দেখানো হয়, যেমন কোনও অ্যাক্টিভিটির শীর্ষক বা আপনার অ্যাপ আইকন। ব্যবহারকারীর ভাষা বা অন্যান্য ডিভাইস কনফিগারেশনের (যেমন, ডিভাইসের পিক্সেল ঘনত্বের উপর ভিত্তি করে একটি ভিন্ন আইকন সাইজ প্রদান করা) উপর ভিত্তি করে এই অ্যাট্রিবিউটের মান ভিন্ন হতে পারে, তাই মানগুলি ম্যানিফেস্ট ফাইলে হার্ডকোড করার পরিবর্তে একটি রিসোর্স বা থিম থেকে সেট করা উচিত। বিভিন্ন ডিভাইস কনফিগারেশনের জন্য আপনার দেওয়া বিকল্প রিসোর্স-এর উপর ভিত্তি করে প্রকৃত ভ্যালু পরিবর্তিত হতে পারে।

রিসোর্সকে নিম্নলিখিত ফর্ম্যাটে ভ্যালু হিসেবে প্রকাশ করা হয়:

"@[package:]type/name"

রিসোর্স আপনার অ্যাপের মাধ্যমে প্রদান করা হলে, আপনি package নাম বাদ দিতে পারেন (লাইব্রেরি ডিপেন্ডেন্সির মাধ্যমে প্রদান করা হলেও, কারণ লাইব্রেরি রিসোর্স আপনার রিসোর্সের সাথে মার্জ করা হয়)। অন্য একমাত্র সঠিক প্যাকেজের নাম হল android, যখন আপনি Android ফ্রেমওয়ার্ক থেকে কোনও রিসোর্স ব্যবহার করতে চান।

type হল এক ধরনের রিসোর্স, যেমন string বা drawable, এবং name হল সেই নাম যা নির্দিষ্ট রিসোর্সকে শনাক্ত করে। এখানে একটি উদাহরণ দেওয়া হল:

<activity android:icon="@drawable/smallPic" ... >

আপনার প্রোজেক্টে কীভাবে রিসোর্স যোগ করবেন সেই সম্পর্কে আরও জানতে, অ্যাপ রিসোর্সের ওভারভিউ পড়ুন।

পরিবর্তে থিম-এ সংজ্ঞায়িত করা মান প্রয়োগ করতে, প্রথম অক্ষরটি @-এর পরিবর্তে ? হতে হবে:

"?[package:]type/name"

স্ট্রিং ভ্যালু
অ্যাট্রিবিউটের ভ্যালু স্ট্রিং হলে, এস্কেপ ক্যারেক্টারের জন্য ডবল ব্যাকস্ল্যাশ (\\) ব্যবহার করুন, যেমন নতুন লাইনের জন্য \\n অথবা ইউনিকোড ক্যারেক্টারের জন্য \\uxxxx।

ম্যানিফেস্ট এলিমেন্ট রেফারেন্স

AndroidManifest.xml ফাইলের সব সঠিক এলিমেন্টের জন্য রেফারেন্স ডকুমেন্টের লিঙ্ক নিচের সারণীতে দেওয়া হল।

<action> ইনটেন্ট ফিল্টারে অ্যাকশন যোগ করে।
<activity> অ্যাক্টিভিটি কম্পোনেন্ট ঘোষণা করে।
<activity-alias> অ্যাক্টিভিটির জন্য একটি উপনাম ঘোষণা করে।
<application> অ্যাপ্লিকেশন ঘোষণা করে।
<category> ইনটেন্ট ফিল্টারে বিভাগের নাম যোগ করে।
<compatible-screens> অ্যাপ্লিকেশনটি প্রতিটি স্ক্রিন কনফিগারেশনের সাথে মানানসই কিনা তা উল্লেখ করে।
<data> ইনটেন্ট ফিল্টারে ডেটা স্পেসিফিকেশন যোগ করে।
<grant-uri-permission> অ্যাপ ডেটার সাবসেট নির্দিষ্ট করে যা অ্যাক্সেস করার অনুমতি পেরেন্ট কন্টেন্ট প্রোভাইডারের কাছে আছে।
<instrumentation> একটি Instrumentation ক্লাস ঘোষণা করে যা আপনাকে সিস্টেমের সাথে একটি অ্যাপ্লিকেশনের ইন্টারঅ্যাকশন নিরীক্ষণ করতে দেয়।
<intent-filter> অ্যাক্টিভিটি, পরিষেবা বা ব্রডকাস্ট রিসিভার যেসব ইনটেন্টের উত্তর দিতে পারে, সেগুলির ধরন নির্দিষ্ট করে।
<manifest> AndroidManifest.xml ফাইলের রুট এলিমেন্ট।
<meta-data> অতিরিক্ত, ইচ্ছামতো ডেটার আইটেমের জন্য নাম-ভ্যালু পেয়ার যা পেরেন্ট কম্পোনেন্টে প্রদান করা যেতে পারে।
<path-permission> কন্টেন্ট প্রোভাইডারের মধ্যে ডেটার নির্দিষ্ট সাবসেটের জন্য পাথ ও প্রয়োজনীয় অনুমতি নির্ধারণ করে।
<permission> একটি নিরাপত্তা অনুমতি ঘোষণা করে যা এই বা অন্যান্য অ্যাপ্লিকেশানগুলির নির্দিষ্ট উপাদান বা বৈশিষ্ট্যগুলিতে অ্যাক্সেস সীমিত করতে ব্যবহার করা যেতে পারে৷
<permission-group> সম্পর্কিত অনুমতির লজিক্যাল গ্রুপিংয়ের জন্য একটি নাম ঘোষণা করে।
<permission-tree> অনুমতির ট্রি-এর জন্য বেস নাম ঘোষণা করে।
<provider> কন্টেন্ট প্রোভাইডার কম্পোনেন্ট ঘোষণা করে।
<queries> আপনার অ্যাপ অ্যাক্সেস করতে চায় এমন অন্যান্য অ্যাপের সেট ঘোষণা করে। প্যাকেজ দৃশ্যমানতা ফিল্টারিং সম্পর্কে গাইডে আরও জানুন।
<receiver> সম্প্রচার রিসিভার কম্পোনেন্ট ঘোষণা করে।
<service> পরিষেবা কম্পোনেন্ট ঘোষণা করে।
<supports-gl-texture> অ্যাপে কাজ করে এমন একটি GL টেক্সচার কম্প্রেশন ফর্ম্যাট ঘোষণা করে।
<supports-screens> আপনার অ্যাপ যেসব স্ক্রিন সাইজ সাপোর্ট করে তা ঘোষণা করে এবং আপনার অ্যাপ যেসব স্ক্রিন সাইজ সাপোর্ট করে তার থেকে বড় স্ক্রিনের জন্য স্ক্রিন কম্প্যাটিবিলিটি মোড চালু করে।
<uses-configuration> অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় নির্দিষ্ট ইনপুট ফিচার নির্দেশ করে।
<uses-feature> অ্যাপ্লিকেশনের মাধ্যমে ব্যবহার করা হয় এমন একটি হার্ডওয়্যার বা সফ্টওয়্যার ফিচার ঘোষণা করে।
<uses-library> একটি শেয়ার করা লাইব্রেরি নির্দিষ্ট করে যার সাথে অ্যাপ্লিকেশনটি অবশ্যই লিঙ্ক করতে হবে।
<uses-native-library> ভেন্ডরের দেওয়া নেটিভ শেয়ার করা লাইব্রেরি নির্দিষ্ট করে যার সাথে অ্যাপটি লিঙ্ক করতে হবে।
<uses-permission> অ্যাপ যাতে সঠিকভাবে কাজ করতে পারে তার জন্য ব্যবহারকারীকে অবশ্যই সিস্টেমের অনুমতি দিতে হবে।
<uses-permission-sdk-23> অ্যাপটি কোনও নির্দিষ্ট অনুমতি চায় কিনা তা উল্লেখ করে, তবে শুধুমাত্র Android 6.0 (API লেভেল 23) বা তার পরবর্তী যেকোনও ভার্সন ইনস্টল করা ডিভাইসে অ্যাপটি ইনস্টল করা থাকলে।
<uses-sdk> API লেভেল ইন্টিজারের মাধ্যমে, Android প্ল্যাটফর্মের এক বা একাধিক ভার্সনের সাথে কোনও অ্যাপ্লিকেশনের মানানসই হওয়ার বিষয়টি প্রকাশ করতে দেয়।

সীমা

ম্যানিফেস্ট ফাইলে নিম্নলিখিত ট্যাগগুলি কতবার ব্যবহার করা যাবে তার একটি সীমা আছে:

ট্যাগের নাম সীমা
<package> 1000
<meta-data> 1000
<uses-library> 1000

নিম্নলিখিত অ্যাট্রিবিউটের সর্বাধিক দৈর্ঘ্যের সীমা আছে:

অ্যাট্রিবিউট সীমা
name 1024
versionName 1024
host 255
mimeType 255

ম্যানিফেস্ট ফাইলের উদাহরণ

নিচে দেওয়া XML হল একটি সহজ উদাহরণ AndroidManifest.xml যা অ্যাপের জন্য দুটি অ্যাক্টিভিটি ঘোষণা করে।

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- Beware that these values are overridden by the build.gradle file -->
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- This name is resolved to com.example.myapp.MainActivity
             based on the namespace property in the build.gradle file -->
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".DisplayMessageActivity"
            android:parentActivityName=".MainActivity" />
    </application>
</manifest>