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

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

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

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

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

ফাইলের বৈশিষ্ট্য

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

অ্যাপের উপাদানসমূহ

আপনার অ্যাপে তৈরি করা প্রতিটি অ্যাপ কম্পোনেন্টের জন্য, ম্যানিফেস্ট ফাইলে একটি সংশ্লিষ্ট 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> এলিমেন্ট) জন্য ঘোষিত আইকন থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয়।

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

অনুমতি

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

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

অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) থেকে শুরু করে, ব্যবহারকারী রানটাইমে কিছু অ্যাপ পারমিশন অনুমোদন বা প্রত্যাখ্যান করতে পারেন। কিন্তু আপনার অ্যাপ যে অ্যান্ড্রয়েড সংস্করণই সমর্থন করুক না কেন, আপনাকে অবশ্যই ম্যানিফেস্টে একটি <uses-permission> এলিমেন্টের মাধ্যমে সমস্ত পারমিশন অনুরোধ ঘোষণা করতে হবে। পারমিশন মঞ্জুর করা হলে, অ্যাপটি সুরক্ষিত ফিচারগুলো ব্যবহার করতে পারে। অন্যথায়, সেই ফিচারগুলো অ্যাক্সেস করার প্রচেষ্টা ব্যর্থ হয়।

আপনার অ্যাপ পারমিশন ব্যবহার করে এর নিজস্ব উপাদানগুলোকেও সুরক্ষিত করতে পারে। এটি android.Manifest.permission এ তালিকাভুক্ত অ্যান্ড্রয়েড দ্বারা সংজ্ঞায়িত যেকোনো পারমিশন, অথবা অন্য কোনো অ্যাপে ঘোষিত পারমিশন ব্যবহার করতে পারে। আপনার অ্যাপ নিজস্ব পারমিশনও সংজ্ঞায়িত করতে পারে। <permission> এলিমেন্টের মাধ্যমে একটি নতুন পারমিশন ঘোষণা করা হয়।

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

ডিভাইসের সামঞ্জস্যতা

ম্যানিফেস্ট ফাইলে আপনি এটাও ঘোষণা করতে পারেন যে আপনার অ্যাপের জন্য কী ধরনের হার্ডওয়্যার বা সফ্টওয়্যার ফিচার প্রয়োজন এবং এর মাধ্যমে, আপনার অ্যাপটি কোন ধরনের ডিভাইসের সাথে সামঞ্জস্যপূর্ণ। গুগল প্লে স্টোর ব্যবহারকারীদের এমন ডিভাইসে আপনার অ্যাপ ইনস্টল করতে দেয় না, যেগুলোতে আপনার অ্যাপের প্রয়োজনীয় ফিচার বা সিস্টেম ভার্সন নেই।

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

<uses-feature>

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

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

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

<uses-sdk>

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

তবে, মনে রাখবেন যে <uses-sdk> এলিমেন্টের অ্যাট্রিবিউটগুলো build.gradle ফাইলের সংশ্লিষ্ট প্রোপার্টি দ্বারা ওভাররাইড হয়ে যায়। তাই, আপনি যদি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করেন, তাহলে এর পরিবর্তে সেখানেই 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
        ...
    }
}

কোটলিন

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> এর পরে থাকতে হবে, যার জন্য এটি একটি অ্যালিয়াস।
  • <manifest> এলিমেন্টের ভিতরে <application> এলিমেন্টটি অবশ্যই সর্বশেষ এলিমেন্ট হতে হবে।
বৈশিষ্ট্য
প্রযুক্তিগতভাবে, সমস্ত অ্যাট্রিবিউটই ঐচ্ছিক। তবে, একটি এলিমেন্ট যাতে তার উদ্দেশ্য পূরণ করতে পারে, সেজন্য অনেক অ্যাট্রিবিউট অবশ্যই নির্দিষ্ট করতে হয়। প্রকৃত ঐচ্ছিক অ্যাট্রিবিউটগুলোর ক্ষেত্রে, রেফারেন্স ডকুমেন্টেশনে ডিফল্ট মানগুলো উল্লেখ করা থাকে।

রুট <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 , যখন আপনি অ্যান্ড্রয়েড ফ্রেমওয়ার্কের কোনো রিসোর্স ব্যবহার করতে চান।

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> অ্যাপটি যে একটিমাত্র জিএল টেক্সচার কম্প্রেশন ফরম্যাট সমর্থন করে, তা ঘোষণা করে।
<supports-screens> আপনার অ্যাপ যে স্ক্রিন সাইজগুলো সমর্থন করে তা ঘোষণা করে এবং আপনার অ্যাপের সমর্থিত আকারের চেয়ে বড় স্ক্রিনের জন্য স্ক্রিন সামঞ্জস্য মোড সক্রিয় করে।
<uses-configuration> অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় নির্দিষ্ট ইনপুট বৈশিষ্ট্যগুলো নির্দেশ করে।
<uses-feature> অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি একক হার্ডওয়্যার বা সফ্টওয়্যার বৈশিষ্ট্য ঘোষণা করে।
<uses-library> একটি শেয়ার্ড লাইব্রেরি নির্দিষ্ট করে, যার সাথে অ্যাপ্লিকেশনটিকে অবশ্যই লিঙ্ক করতে হবে।
<uses-native-library> বিক্রেতা-প্রদত্ত একটি নেটিভ শেয়ার্ড লাইব্রেরি নির্দিষ্ট করে, যার সাথে অ্যাপটিকে অবশ্যই লিঙ্ক করতে হবে।
<uses-permission> এটি এমন একটি সিস্টেম অনুমতি যা অ্যাপটি সঠিকভাবে কাজ করার জন্য ব্যবহারকারীকে অবশ্যই প্রদান করতে হবে।
<uses-permission-sdk-23> এটি নির্দিষ্ট করে যে একটি অ্যাপ একটি নির্দিষ্ট অনুমতি চায়, তবে শুধুমাত্র যদি অ্যাপটি অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) বা তার উচ্চতর সংস্করণে চালিত কোনো ডিভাইসে ইনস্টল করা থাকে।
<uses-sdk> একটি এপিআই লেভেল ইন্টিজারের মাধ্যমে, এটি আপনাকে অ্যান্ড্রয়েড প্ল্যাটফর্মের এক বা একাধিক সংস্করণের সাথে কোনো অ্যাপ্লিকেশনের সামঞ্জস্যতা প্রকাশ করতে দেয়।

সীমা

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

ট্যাগ নাম সীমা
<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>