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

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

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

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

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

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

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

অ্যাপের উপাদানগুলি

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

যদি আপনি ম্যানিফেস্ট ফাইলে ঘোষণা না করে এই উপাদানগুলির যেকোনো একটিকে সাবক্লাস করেন, তাহলে সিস্টেমটি এটি শুরু করতে পারবে না।

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

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

তবে, যদি name মানের প্রথম অক্ষরটি একটি পিরিয়ড হয়, তাহলে module-level build.gradle ফাইলের namespace সম্পত্তি থেকে অ্যাপের namespace নামের সাথে prefix করা হয়। উদাহরণস্বরূপ, যদি 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 অ্যাপগুলিকে সংবেদনশীল ব্যবহারকারীর ডেটা, যেমন পরিচিতি এবং SMS, অথবা ক্যামেরা এবং ইন্টারনেট অ্যাক্সেসের মতো নির্দিষ্ট সিস্টেম বৈশিষ্ট্য অ্যাক্সেস করার জন্য অনুমতি চাইতে হবে। প্রতিটি অনুমতি একটি অনন্য লেবেল দ্বারা চিহ্নিত করা হয়। উদাহরণস্বরূপ, যে অ্যাপকে SMS বার্তা পাঠাতে হবে তার ম্যানিফেস্টে নিম্নলিখিত লাইনটি থাকতে হবে:

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

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

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

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

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

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

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

<ব্যবহার-বৈশিষ্ট্য>

<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 21

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

কোটলিন

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

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

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

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

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

ফাইল কনভেনশন

এই বিভাগটি ম্যানিফেস্ট ফাইলের সমস্ত উপাদান এবং বৈশিষ্ট্যের ক্ষেত্রে সাধারণত প্রযোজ্য নিয়ম এবং নিয়মগুলি বর্ণনা করে।

উপাদানসমূহ
শুধুমাত্র <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

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

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

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

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

"?[ 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 স্তরের পূর্ণসংখ্যার মাধ্যমে আপনাকে অ্যান্ড্রয়েড প্ল্যাটফর্মের এক বা একাধিক সংস্করণের সাথে একটি অ্যাপ্লিকেশনের সামঞ্জস্য প্রকাশ করতে দেয়।

সীমা

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

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