ऐप्लिकेशन मेनिफ़ेस्ट की खास जानकारी

हर ऐप्लिकेशन प्रोजेक्ट में AndroidManifest.xml फ़ाइल होनी चाहिए. साथ ही, उसका नाम भी यही होना चाहिए. यह फ़ाइल, प्रोजेक्ट सोर्स सेट के रूट में होनी चाहिए. मेनिफ़ेस्ट फ़ाइल, Android बिल्ड टूल, Android ऑपरेटिंग सिस्टम, और Google Play को आपके ऐप्लिकेशन के बारे में ज़रूरी जानकारी देती है.

मेनिफ़ेस्ट फ़ाइल में, कई अन्य चीज़ों के साथ-साथ, इन चीज़ों के बारे में भी बताना ज़रूरी है:

  • ऐप्लिकेशन के कॉम्पोनेंट. इनमें सभी गतिविधियां, सेवाएं, ब्रॉडकास्ट रिसीवर, और कॉन्टेंट उपलब्ध कराने वाले शामिल हैं. हर कॉम्पोनेंट में बुनियादी प्रॉपर्टी तय की जानी चाहिए. जैसे, Kotlin या Java क्लास का नाम. यह कॉम्पोनेंट की क्षमताओं के बारे में भी बताता है. जैसे, यह किन डिवाइस कॉन्फ़िगरेशन को मैनेज कर सकता है. साथ ही, यह इंटेंट फ़िल्टर के बारे में भी बताता है. इनसे यह पता चलता है कि कॉम्पोनेंट को कैसे शुरू किया जा सकता है. नीचे दिए गए सेक्शन में, ऐप्लिकेशन कॉम्पोनेंट के बारे में ज़्यादा जानें.
  • ऐप्लिकेशन को सिस्टम या अन्य ऐप्लिकेशन के सुरक्षित हिस्सों को ऐक्सेस करने के लिए, इन अनुमतियों की ज़रूरत होती है. यह उन अनुमतियों के बारे में भी बताता है जो अन्य ऐप्लिकेशन के पास होनी चाहिए, ताकि वे इस ऐप्लिकेशन का कॉन्टेंट ऐक्सेस कर सकें. अगले सेक्शन में, अनुमतियों के बारे में ज़्यादा जानें.
  • ऐप्लिकेशन के लिए ज़रूरी हार्डवेयर और सॉफ़्टवेयर की सुविधाएं. इससे यह तय होता है कि Google Play से कौनसे डिवाइसों पर ऐप्लिकेशन इंस्टॉल किया जा सकता है. नीचे दिए गए सेक्शन में, डिवाइस के साथ काम करने की सुविधा के बारे में ज़्यादा जानें.

अगर ऐप्लिकेशन बनाने के लिए Android Studio का इस्तेमाल किया जा रहा है, तो मेनिफ़ेस्ट फ़ाइल आपके लिए बनाई जाती है. साथ ही, ऐप्लिकेशन बनाते समय ज़्यादातर ज़रूरी मेनिफ़ेस्ट एलिमेंट जोड़ दिए जाते हैं. ऐसा खास तौर पर तब होता है, जब कोड टेंप्लेट का इस्तेमाल किया जा रहा हो.

फ़ाइल की सुविधाएं

यहां दिए गए सेक्शन में बताया गया है कि आपके ऐप्लिकेशन की कुछ सबसे अहम विशेषताओं को मेनिफ़ेस्ट फ़ाइल में कैसे दिखाया जाता है.

ऐप्लिकेशन कॉम्पोनेंट

अपने ऐप्लिकेशन में बनाए गए हर ऐप्लिकेशन कॉम्पोनेंट के लिए, मेनिफ़ेस्ट फ़ाइल में उससे जुड़ा एक्सएमएल एलिमेंट शामिल करें:

अगर आपने मेनिफ़ेस्ट फ़ाइल में एलान किए बिना इनमें से किसी भी कॉम्पोनेंट को सबक्लास किया है, तो सिस्टम उसे शुरू नहीं कर सकता.

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 (एपीआई लेवल 23) से, उपयोगकर्ता के पास रनटाइम के दौरान ऐप्लिकेशन की कुछ अनुमतियों को स्वीकार या अस्वीकार करने का विकल्प होता है. हालांकि, आपका ऐप्लिकेशन 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>

आम तौर पर, प्लैटफ़ॉर्म के हर नए वर्शन में ऐसे नए एपीआई जोड़े जाते हैं जो पिछले वर्शन में उपलब्ध नहीं होते. यह बताने के लिए कि आपका ऐप्लिकेशन किस कम से कम वर्शन के साथ काम करता है, आपके मेनिफ़ेस्ट में <uses-sdk> टैग और उसका minSdkVersion एट्रिब्यूट शामिल होना चाहिए.

हालांकि, ध्यान रखें कि <uses-sdk> एलिमेंट में मौजूद एट्रिब्यूट, build.gradle फ़ाइल में मौजूद उनसे जुड़ी प्रॉपर्टी से बदल दिए जाते हैं. इसलिए, अगर Android Studio का इस्तेमाल किया जा रहा है, तो minSdkVersion और targetSdkVersion वैल्यू यहां डालें:

Groovy

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
        ...
    }
}

Kotlin

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 फ़ाइल के बारे में ज़्यादा जानने के लिए, बिल्ड को कॉन्फ़िगर करने का तरीका पढ़ें.

अलग-अलग डिवाइसों पर ऐप्लिकेशन के काम करने के बारे में जानकारी देने के तरीके के बारे में ज़्यादा जानने के लिए, डिवाइस के साथ काम करने की सुविधा के बारे में खास जानकारी देखें.

फ़ाइल के नाम रखने के नियम

इस सेक्शन में, उन नियमों और शर्तों के बारे में बताया गया है जो आम तौर पर मेनिफ़ेस्ट फ़ाइल के सभी एलिमेंट और एट्रिब्यूट पर लागू होती हैं.

तत्व
सिर्फ़ <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> यह ऐप्लिकेशन के लिए, जीएल टेक्सचर कंप्रेस करने का एक ऐसा फ़ॉर्मैट तय करता है जो ऐप्लिकेशन के साथ काम करता है.
<supports-screens> इससे यह तय होता है कि आपका ऐप्लिकेशन किन स्क्रीन साइज़ पर काम करता है. साथ ही, यह उन स्क्रीन के लिए स्क्रीन कंपैटिबिलिटी मोड चालू करता है जिन पर आपका ऐप्लिकेशन काम नहीं करता.
<uses-configuration> इससे पता चलता है कि ऐप्लिकेशन को किन इनपुट सुविधाओं की ज़रूरत है.
<uses-feature> यह ऐप्लिकेशन में इस्तेमाल होने वाली किसी एक हार्डवेयर या सॉफ़्टवेयर सुविधा के बारे में बताता है.
<uses-library> इस विकल्प से, शेयर की गई उस लाइब्रेरी के बारे में पता चलता है जिससे ऐप्लिकेशन को लिंक करना ज़रूरी है.
<uses-native-library> यह वेंडर की ओर से उपलब्ध कराई गई नेटिव शेयर की गई लाइब्रेरी के बारे में बताता है. ऐप्लिकेशन को इससे लिंक करना ज़रूरी है.
<uses-permission> यह सिस्टम की ऐसी अनुमति के बारे में बताता है जिसे उपयोगकर्ता को देना होगा, ताकि ऐप्लिकेशन ठीक से काम कर सके.
<uses-permission-sdk-23> इससे पता चलता है कि ऐप्लिकेशन को किसी अनुमति की ज़रूरत है. हालांकि, ऐसा सिर्फ़ तब होगा, जब ऐप्लिकेशन को Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन वाले डिवाइस पर इंस्टॉल किया गया हो.
<uses-sdk> इस टैग की मदद से, यह बताया जा सकता है कि ऐप्लिकेशन, Android प्लैटफ़ॉर्म के एक या उससे ज़्यादा वर्शन के साथ काम करता है. इसके लिए, एपीआई लेवल के पूर्णांक का इस्तेमाल किया जाता है.

सीमाएं

मेनिफ़ेस्ट फ़ाइल में इन टैग को सिर्फ़ एक बार इस्तेमाल किया जा सकता है:

टैग का नाम रोज़ाना इस्तेमाल की सीमा
<package> 1000
<meta-data> 1000
<uses-library> 1000

यहां दिए गए एट्रिब्यूट की वैल्यू के लिए, ज़्यादा से ज़्यादा लंबाई तय की गई है:

एट्रिब्यूट रोज़ाना इस्तेमाल की सीमा
name 1024
versionName 1024
host 255
mimeType 255

मेनिफ़ेस्ट फ़ाइल का उदाहरण

यहां दिया गया एक्सएमएल, एक सामान्य उदाहरण 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>