<मेनिफ़ेस्ट>

सिंटैक्स:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:sharedUserMaxSdkVersion="integer"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    ...
</manifest>
इनमें शामिल है:
कोई नहीं
इसमें यह जानकारी शामिल होनी चाहिए:
<application>
इसमें ये चीज़ें शामिल हो सकती हैं:
<attribution>
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>
description:
AndroidManifest.xml फ़ाइल का रूट एलिमेंट. इसमें <application> एलिमेंट होना चाहिए और xmlns:android और package एट्रिब्यूट की जानकारी होनी चाहिए.
एट्रिब्यूट:
xmlns:android
Android नेमस्पेस तय करता है. यह एट्रिब्यूट हमेशा "http://schemas.android.com/apk/res/android" पर सेट होता है.
package
APK की मेनिफ़ेस्ट फ़ाइल में package एट्रिब्यूट की वैल्यू, आपके ऐप्लिकेशन के यूनीक ऐप्लिकेशन आईडी को दिखाती है. इसे Android ऐप्लिकेशन के लिए, Java भाषा के स्टाइल में पैकेज के पूरे नाम के तौर पर फ़ॉर्मैट किया जाता है. नाम में अंग्रेज़ी के बड़े या छोटे अक्षर, संख्याएं, और अंडरस्कोर ('_') हो सकते हैं. हालांकि, पैकेज के नाम के अलग-अलग हिस्से सिर्फ़ अक्षरों से शुरू हो सकते हैं.

package वैल्यू को बदलने से बचें, क्योंकि इससे एक नया ऐप्लिकेशन बन जाता है. आपके ऐप्लिकेशन के पिछले वर्शन के उपयोगकर्ताओं को अपडेट नहीं मिलता और वे अपने डेटा को पुराने और नए वर्शन के बीच ट्रांसफ़र नहीं कर पाते.

AGP 7.3 से शुरू होने वाले Gradle-आधारित बिल्ड सिस्टम में, सोर्स मेनिफ़ेस्ट फ़ाइल में package वैल्यू को सीधे तौर पर सेट न करें. ज़्यादा जानकारी के लिए, ऐप्लिकेशन आईडी सेट करना लेख पढ़ें.

android:sharedUserId

एपीआई लेवल 29 से, इस कॉन्स्टेंट का इस्तेमाल नहीं किया जा सकता.
शेयर किए गए यूज़र आईडी की वजह से, पैकेज मैनेजर में गड़बड़ियां हो सकती हैं. इसलिए, इनका इस्तेमाल करने का सुझाव नहीं दिया जाता. साथ ही, Android के आने वाले वर्शन में इन्हें हटाया जा सकता है. इसके बजाय, शेयर किए गए कॉम्पोनेंट के बीच इंटरऑपरेबिलिटी को आसान बनाने के लिए, सेवाओं और कॉन्टेंट की सेवा देने वाली कंपनियों जैसी सही कम्यूनिकेशन सुविधाओं का इस्तेमाल करें. मौजूदा ऐप्लिकेशन इस वैल्यू को नहीं हटा सकते, क्योंकि शेयर किए गए उपयोगकर्ता आईडी से माइग्रेट करने की सुविधा काम नहीं करती. इन ऐप्लिकेशन में, android:sharedUserMaxSdkVersion="32" जोड़ें, ताकि नए उपयोगकर्ता के इंस्टॉल पर शेयर किए गए उपयोगकर्ता आईडी का इस्तेमाल न किया जा सके.

Linux के उस उपयोगकर्ता आईडी का नाम जिसे अन्य ऐप्लिकेशन के साथ शेयर किया जाता है. डिफ़ॉल्ट रूप से, Android हर ऐप्लिकेशन को अपना यूनीक यूज़र आईडी असाइन करता है. हालांकि, अगर इस एट्रिब्यूट को दो या उससे ज़्यादा ऐप्लिकेशन के लिए एक ही वैल्यू पर सेट किया जाता है, तो वे सभी एक ही आईडी शेयर करते हैं. ऐसा तब होता है, जब उनके सर्टिफ़िकेट सेट एक जैसे हों. एक ही उपयोगकर्ता आईडी वाले ऐप्लिकेशन, एक-दूसरे का डेटा ऐक्सेस कर सकते हैं. साथ ही, अगर ज़रूरत हो, तो एक ही प्रोसेस में चल सकते हैं.

android:targetSandboxVersion
इस ऐप्लिकेशन के इस्तेमाल के लिए टारगेट सैंडबॉक्स. सैंडबॉक्स वर्शन का नंबर जितना ज़्यादा होगा, सुरक्षा का लेवल उतना ही ज़्यादा होगा. इसकी डिफ़ॉल्ट वैल्यू 1 है. इसे 2 पर भी सेट किया जा सकता है. इस एट्रिब्यूट को 2 पर सेट करने से, ऐप्लिकेशन को किसी दूसरे SELinux सैंडबॉक्स पर स्विच कर दिया जाता है.

लेवल-2 सैंडबॉक्स पर ये पाबंदियां लागू होती हैं:

  • नेटवर्क सुरक्षा कॉन्फ़िगरेशन में, usesCleartextTraffic की डिफ़ॉल्ट वैल्यू गलत है.
  • यूआईडी शेयर करने की अनुमति नहीं है.

Android 8.0 (एपीआई लेवल 26) या उसके बाद के वर्शन को टारगेट करने वाले Android इंस्टैंट ऐप्लिकेशन के लिए, इस एट्रिब्यूट को 2 पर सेट किया गया है. अपने ऐप्लिकेशन के इंस्टॉल किए गए वर्शन में, सैंडबॉक्स लेवल को कम पाबंदी वाले लेवल 1 पर सेट किया जा सकता है. हालांकि, ऐसा करने पर, आपका ऐप्लिकेशन इंस्टैंट ऐप्लिकेशन से, ऐप्लिकेशन के इंस्टॉल किए गए वर्शन में डेटा को सेव नहीं करता. इंस्टैंट ऐप्लिकेशन से, ऐप्लिकेशन के इंस्टॉल किए गए वर्शन में डेटा को सेव करने के लिए, आपको इंस्टॉल किए गए ऐप्लिकेशन के सैंडबॉक्स की वैल्यू को 2 पर सेट करना होगा.

ऐप्लिकेशन इंस्टॉल होने के बाद, उसके टारगेट सैंडबॉक्स की वैल्यू को सिर्फ़ ज़्यादा वैल्यू पर अपडेट किया जा सकता है. टारगेट सैंडबॉक्स की वैल्यू को डाउनग्रेड करने के लिए, ऐप्लिकेशन को अनइंस्टॉल करें और उसे ऐसे वर्शन से बदलें जिसके मेनिफ़ेस्ट में इस एट्रिब्यूट की कम वैल्यू हो.

android:sharedUserLabel

एपीआई लेवल 29 से, इस कॉन्स्टेंट का इस्तेमाल नहीं किया जा सकता.
शेयर किए गए यूज़र आईडी की वजह से, पैकेज मैनेजर में गड़बड़ियां हो सकती हैं. इसलिए, इनका इस्तेमाल करने का सुझाव नहीं दिया जाता. साथ ही, Android के आने वाले वर्शन में इन्हें हटाया जा सकता है. इसके बजाय, शेयर किए गए कॉम्पोनेंट के बीच इंटरऑपरेबिलिटी को आसान बनाने के लिए, सेवाओं और कॉन्टेंट की सेवा देने वाली कंपनियों जैसी सही कम्यूनिकेशन सुविधाओं का इस्तेमाल करें. मौजूदा ऐप्लिकेशन इस वैल्यू को नहीं हटा सकते, क्योंकि शेयर किए गए उपयोगकर्ता आईडी को माइग्रेट नहीं किया जा सकता.

शेयर किए गए User-ID के लिए, उपयोगकर्ता के पढ़ने लायक लेबल. लेबल को स्ट्रिंग रिसॉर्स के रेफ़रंस के तौर पर सेट किया गया है. यह रॉ स्ट्रिंग नहीं हो सकती.

इस एट्रिब्यूट को एपीआई लेवल 3 में जोड़ा गया था. यह सिर्फ़ तब काम का होता है, जब sharedUserId एट्रिब्यूट भी सेट हो.

android:sharedUserMaxSdkVersion

शेयर किए गए User-ID की वजह से, पैकेज मैनेजर में गड़बड़ियां हो सकती हैं. इसलिए, इनका इस्तेमाल करने का सुझाव नहीं दिया जाता. साथ ही, Android के आने वाले वर्शन में इन्हें हटाया जा सकता है. इसके बजाय, शेयर किए गए कॉम्पोनेंट के बीच इंटरऑपरेबिलिटी को आसान बनाने के लिए, सेवाओं और कॉन्टेंट की सेवा देने वाली कंपनियों जैसी सही कम्यूनिकेशन सुविधाओं का इस्तेमाल करें.

SDK टूल का वह ज़्यादा से ज़्यादा वर्शन जहां सिस्टम अब भी android:sharedUserId का इस्तेमाल करता है. अगर आपका ऐप्लिकेशन, तय की गई वैल्यू से ज़्यादा के SDK वर्शन वाले डिवाइस पर हाल ही में इंस्टॉल किया गया है, तो आपका ऐप्लिकेशन वैसे ही काम करता है जैसे आपने android:sharedUserId की वैल्यू कभी तय न की हो.

इस एट्रिब्यूट को एपीआई लेवल 33 में जोड़ा गया था. यह सिर्फ़ तब काम का होता है, जब sharedUserId एट्रिब्यूट भी सेट हो.

android:versionCode
इंटरनल वर्शन नंबर. इस नंबर का इस्तेमाल सिर्फ़ यह तय करने के लिए किया जाता है कि कोई वर्शन, दूसरे वर्शन से ज़्यादा नया है या नहीं. ज़्यादा संख्या वाले वर्शन, ज़्यादा नए वर्शन होते हैं. यह वर्शन नंबर, उपयोगकर्ताओं को नहीं दिखाया जाता. इसे versionName एट्रिब्यूट से सेट किया जाता है.

वैल्यू को 0 से ज़्यादा की पॉज़िटिव संख्या के तौर पर सेट किया गया हो. इसे अपनी पसंद के मुताबिक तय किया जा सकता है. हालांकि, यह ज़रूरी है कि हर अगले वर्शन की संख्या, पिछले वर्शन की संख्या से ज़्यादा हो. उदाहरण के लिए, यह कोई बिल्ड नंबर हो सकता है. इसके अलावा, "x" और "y" को अलग-अलग, सबसे नीचे और सबसे ऊपर के 16 बिट में कोड में बदलकर, "x.y" फ़ॉर्मैट में मौजूद वर्शन नंबर को पूर्णांक में बदला जा सकता है. इसके अलावा, हर बार नया वर्शन रिलीज़ होने पर, संख्या को एक से बढ़ाया जा सकता है.

android:versionName
उपयोगकर्ताओं को दिखाया जाने वाला वर्शन नंबर. इस एट्रिब्यूट को रॉ स्ट्रिंग या स्ट्रिंग रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है. इस स्ट्रिंग का मकसद, उपयोगकर्ताओं को दिखाना है. versionCode एट्रिब्यूट में, वर्शन का वह अहम नंबर होता है जिसका इस्तेमाल अंदरूनी तौर पर किया जाता है.
android:installLocation
ऐप्लिकेशन को इंस्टॉल करने की डिफ़ॉल्ट जगह. इन कीवर्ड स्ट्रिंग को स्वीकार किया जाता है:
वैल्यू ब्यौरा
"internalOnly" ऐप्लिकेशन सिर्फ़ डिवाइस के इंटरनल स्टोरेज में इंस्टॉल होता है. अगर यह सेट है, तो ऐप्लिकेशन कभी भी एसडी कार्ड जैसे बाहरी स्टोरेज पर इंस्टॉल नहीं होगा. अगर डिवाइस का स्टोरेज भर जाता है, तो सिस्टम ऐप्लिकेशन इंस्टॉल नहीं करता. अगर android:installLocation की वैल्यू नहीं दी जाती है, तो यह डिफ़ॉल्ट तौर पर होता है.
"auto" ऐप्लिकेशन को बाहरी स्टोरेज में इंस्टॉल किया जा सकता है. हालांकि, सिस्टम डिफ़ॉल्ट रूप से ऐप्लिकेशन को इंटरनल स्टोरेज में इंस्टॉल करता है. अगर डिवाइस का इंटरनल स्टोरेज भर जाता है, तो सिस्टम उसे बाहरी स्टोरेज में इंस्टॉल कर देता है. इंस्टॉल होने के बाद, उपयोगकर्ता सिस्टम सेटिंग की मदद से, ऐप्लिकेशन को इंटरनल या बाहरी स्टोरेज में ले जा सकता है.
"preferExternal" ऐप्लिकेशन को बाहरी स्टोरेज में इंस्टॉल करने की प्राथमिकता दी जाती है. इस बात की कोई गारंटी नहीं है कि सिस्टम इस अनुरोध को स्वीकार करेगा. अगर बाहरी मीडिया उपलब्ध नहीं है या उसका स्टोरेज भर गया है, तो ऐप्लिकेशन को डिवाइस के इंटरनल स्टोरेज में इंस्टॉल किया जा सकता है. इंस्टॉल होने के बाद, उपयोगकर्ता सिस्टम सेटिंग की मदद से, ऐप्लिकेशन को डिवाइस के इंटरनल या बाहरी स्टोरेज में ले जा सकता है.

ध्यान दें: डिफ़ॉल्ट रूप से, आपका ऐप्लिकेशन डिवाइस के इंटरनल स्टोरेज में इंस्टॉल होता है. इसे बाहरी स्टोरेज में तब तक इंस्टॉल नहीं किया जा सकता, जब तक इस एट्रिब्यूट को "auto" या "preferExternal" के तौर पर सेट नहीं किया जाता.

जब कोई ऐप्लिकेशन बाहरी स्टोरेज में इंस्टॉल होता है, तो:

  • APK फ़ाइल, बाहरी स्टोरेज में सेव की जाती है. हालांकि, डेटाबेस जैसे ऐप्लिकेशन का डेटा अब भी डिवाइस के इंटरनल स्टोरेज में सेव होता है.
  • जिस कंटेनर में APK फ़ाइल सेव की जाती है उसे एक पासकोड से एन्क्रिप्ट किया जाता है. इससे ऐप्लिकेशन सिर्फ़ उस डिवाइस पर काम करता है जिस पर उसे इंस्टॉल किया गया है. उपयोगकर्ता, एसडी कार्ड को किसी दूसरे डिवाइस पर ट्रांसफ़र नहीं कर सकता और कार्ड पर इंस्टॉल किए गए ऐप्लिकेशन का इस्तेमाल नहीं कर सकता. एक ही डिवाइस में कई एसडी कार्ड इस्तेमाल किए जा सकते हैं.
  • उपयोगकर्ता के अनुरोध पर, ऐप्लिकेशन को इंटरनल स्टोरेज में ले जाया जा सकता है.

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

इस एट्रिब्यूट का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन इंस्टॉल करने की जगह लेख पढ़ें. इसमें, पुराने वर्शन के साथ काम करने की सुविधा को बनाए रखने का तरीका भी बताया गया है.

इसमें शामिल किया गया: एपीआई लेवल 8.

पहली बार इसमें दिखाया गया:
सभी एट्रिब्यूट के लिए एपीआई लेवल 1, बशर्ते एट्रिब्यूट के ब्यौरे में कुछ और न बताया गया हो.
यह भी देखें:
<application>