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

हर ऐप्लिकेशन प्रोजेक्ट में, प्रोजेक्ट सोर्स सेट के रूट में, 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.Manifest.permission में बताई गई, Android की तय की गई किसी भी अनुमति या किसी दूसरे ऐप्लिकेशन में बताई गई अनुमति का इस्तेमाल कर सकता है. आपका ऐप्लिकेशन, अपनी अनुमतियां भी तय कर सकता है. <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>