एपीआई लेवल 8 से, अपने ऐप्लिकेशन को बाहरी स्टोरेज (उदाहरण के लिए, डिवाइस का एसडी कार्ड) पर इंस्टॉल करने की अनुमति दी जा सकती है. यह एक वैकल्पिक सुविधा है. इसके लिए, android:installLocation मेनिफ़ेस्ट एट्रिब्यूट का इस्तेमाल करके, अपने ऐप्लिकेशन के बारे में एलान किया जा सकता है
. अगर आपने इस एट्रिब्यूट का एलान नहीं किया है, तो आपका ऐप्लिकेशन सिर्फ़ इंटरनल स्टोरेज पर इंस्टॉल होगा. साथ ही, इसे बाहरी स्टोरेज पर नहीं ले जाया जा सकेगा.
सिस्टम को अपने ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने की अनुमति देने के लिए, अपनी
मेनिफ़ेस्ट फ़ाइल में बदलाव करें. इसके लिए, <manifest> एलिमेंट में android:installLocation एट्रिब्यूट जोड़ें.
इसकी वैल्यू "preferExternal" या "auto" होनी चाहिए. उदाहरण के लिए:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" ... >
अगर आपने "preferExternal" का एलान किया है, तो इसका मतलब है कि आपने अपने ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने का अनुरोध किया है. हालांकि, सिस्टम इस बात की गारंटी नहीं देता कि आपका ऐप्लिकेशन बाहरी स्टोरेज पर इंस्टॉल होगा. अगर बाहरी स्टोरेज भर गया है, तो सिस्टम इसे इंटरनल स्टोरेज पर इंस्टॉल करेगा. उपयोगकर्ता, आपके ऐप्लिकेशन को इन दोनों जगहों के बीच ले जा सकता है.
अगर आपने "auto" का एलान किया है, तो इसका मतलब है कि आपका ऐप्लिकेशन बाहरी स्टोरेज पर इंस्टॉल किया जा सकता है. हालांकि, आपने इंस्टॉल करने की जगह के बारे में कोई प्राथमिकता नहीं दी है. सिस्टम, कई फ़ैक्टर के आधार पर यह तय करेगा कि आपका ऐप्लिकेशन कहां इंस्टॉल करना है. उपयोगकर्ता, आपके ऐप्लिकेशन को इन दोनों जगहों के बीच ले जा सकता है.
जब आपका ऐप्लिकेशन बाहरी स्टोरेज पर इंस्टॉल होता है, तब:
- जब तक बाहरी स्टोरेज डिवाइस पर माउंट रहता है, तब तक ऐप्लिकेशन की परफ़ॉर्मेंस पर कोई असर नहीं पड़ता.
.apkफ़ाइल, बाहरी स्टोरेज पर सेव होती है. हालांकि, उपयोगकर्ता का निजी डेटा, डेटाबेस, ऑप्टिमाइज़ की गई.dexफ़ाइलें, और एक्सट्रैक्ट किया गया नेटिव कोड, डिवाइस की इंटरनल मेमोरी पर सेव होता है.- जिस यूनीक कंटेनर में आपका ऐप्लिकेशन सेव होता है उसे रैंडम तरीके से जनरेट की गई कुंजी से एन्क्रिप्ट किया जाता है. इसे सिर्फ़ वह डिवाइस डिक्रिप्ट कर सकता है जिस पर इसे पहली बार इंस्टॉल किया गया था. इसलिए, एसडी कार्ड पर इंस्टॉल किया गया ऐप्लिकेशन सिर्फ़ एक डिवाइस पर काम करता है.
- उपयोगकर्ता, सिस्टम की सेटिंग में जाकर आपके ऐप्लिकेशन को इंटरनल स्टोरेज पर ले जा सकता है.
चेतावनी: जब उपयोगकर्ता, किसी कंप्यूटर के साथ फ़ाइलें शेयर करने के लिए, यूएसबी मास स्टोरेज की सुविधा चालू करता है या सिस्टम की सेटिंग के ज़रिए एसडी कार्ड को अनमाउंट करता है, तो बाहरी स्टोरेज डिवाइस से अनमाउंट हो जाता है. साथ ही, बाहरी स्टोरेज पर चल रहे सभी ऐप्लिकेशन तुरंत बंद हो जाते हैं.
पिछले वर्शन के गेम खेलने की सुविधा
आपके ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने की सुविधा, सिर्फ़ उन डिवाइसों पर उपलब्ध है जो एपीआई लेवल 8 (Android 2.2) या उससे नए वर्शन पर काम करते हैं. एपीआई लेवल 8 से पहले बनाए गए मौजूदा ऐप्लिकेशन हमेशा इंटरनल स्टोरेज पर इंस्टॉल होंगे. साथ ही, उन्हें बाहरी स्टोरेज पर नहीं ले जाया जा सकेगा. भले ही, डिवाइस एपीआई लेवल 8 पर काम कर रहा हो. हालांकि, अगर आपका ऐप्लिकेशन, एपीआई लेवल 8 से कम वाले वर्शन के साथ काम करने के लिए डिज़ाइन किया गया है, तो आपके पास एपीआई लेवल 8 या उससे नए वर्शन वाले डिवाइसों के लिए, इस सुविधा को चालू करने का विकल्प होता है. इसके बावजूद, आपका ऐप्लिकेशन एपीआई लेवल 8 से कम वाले वर्शन का इस्तेमाल करने वाले डिवाइसों के साथ काम करेगा.
बाहरी स्टोरेज पर इंस्टॉल करने की अनुमति देने और एपीआई लेवल 8 से कम वाले वर्शन के साथ काम करने की सुविधा चालू रखने के लिए:
<manifest>एलिमेंट में,android:installLocationएट्रिब्यूट को "auto" या "preferExternal" वैल्यू के साथ शामिल करें.android:minSdkVersionएट्रिब्यूट को पहले जैसा ही रहने दें. इसकी वैल्यू "8" से कम होनी चाहिए. साथ ही, पक्का करें कि आपके ऐप्लिकेशन कोड में सिर्फ़ ऐसे एपीआई का इस्तेमाल किया गया हो जो उस लेवल के साथ काम करते हों.- अपने ऐप्लिकेशन को कंपाइल करने के लिए, अपने बिल्ड टारगेट को एपीआई लेवल 8 पर बदलें. ऐसा करना ज़रूरी है, क्योंकि Android की पुरानी लाइब्रेरी,
android:installLocationएट्रिब्यूट को नहीं समझती हैं. इसलिए, अगर यह एट्रिब्यूट मौजूद है, तो वे आपके ऐप्लिकेशन को कंपाइल नहीं करेंगी.
जब आपका ऐप्लिकेशन, एपीआई लेवल 8 से कम वाले वर्शन वाले डिवाइस पर इंस्टॉल होता है, तो android:installLocation एट्रिब्यूट को अनदेखा कर दिया जाता है. साथ ही, ऐप्लिकेशन इंटरनल स्टोरेज पर इंस्टॉल होता है.
चेतावनी: हालांकि, इस तरह के एक्सएमएल मार्कअप को पुराने प्लैटफ़ॉर्म अनदेखा कर देंगे. फिर भी, आपको इस बात का ध्यान रखना होगा कि जब आपका minSdkVersion, "8" से कम हो, तब एपीआई लेवल 8 में पेश किए गए प्रोग्रामिंग एपीआई का इस्तेमाल न किया जाए. ऐसा तब तक न करें, जब तक आपने अपने कोड में पिछले वर्शन के साथ काम करने की सुविधा देने के लिए ज़रूरी काम न कर लिया हो.
ऐसे ऐप्लिकेशन जिन्हें बाहरी स्टोरेज पर इंस्टॉल नहीं किया जाना चाहिए
जब उपयोगकर्ता, अपने कंप्यूटर के साथ फ़ाइलें शेयर करने के लिए, यूएसबी मास स्टोरेज की सुविधा चालू करता है या बाहरी स्टोरेज को अनमाउंट या हटाता है, तो बाहरी स्टोरेज पर इंस्टॉल किया गया और फ़िलहाल चल रहा कोई भी ऐप्लिकेशन बंद हो जाता है. जब तक मास स्टोरेज की सुविधा बंद नहीं की जाती और डिवाइस पर बाहरी स्टोरेज को फिर से माउंट नहीं किया जाता, तब तक सिस्टम को ऐप्लिकेशन के बारे में कोई जानकारी नहीं मिलती. ऐप्लिकेशन को बंद करने और उपयोगकर्ता के लिए इसे उपलब्ध न कराने के अलावा, इससे कुछ तरह के ऐप्लिकेशन ज़्यादा गंभीर तरीके से काम करना बंद कर सकते हैं. अगर आपको यह पक्का करना है कि आपका ऐप्लिकेशन उम्मीद के मुताबिक काम करे, तो आपको अपने ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने की अनुमति नहीं देनी चाहिए. ऐसा तब करें, जब आपका ऐप्लिकेशन इनमें से किसी भी सुविधा का इस्तेमाल करता हो. इसकी वजह यह है कि बाहरी स्टोरेज को अनमाउंट करने पर, यहां बताई गई समस्याएं आ सकती हैं:
- सेवाएं
- आपका चल रहा
Serviceबंद हो जाता है. साथ ही, बाहरी स्टोरेज को फिर से माउंट करने पर, यह फिर से शुरू नहीं होता. इस सेवा से जुड़े ऐप्लिकेशन,ACTION_EXTERNAL_APPLICATIONS_AVAILABLEब्रॉडकास्ट इंटेंट के लिए रजिस्टर कर सकते हैं. इससे उन सभी ऐप्लिकेशन को सूचना मिलती है जो बाहरी स्टोरेज पर इंस्टॉल नहीं हैं. ऐसा तब होता है, जब बाहरी स्टोरेज पर इंस्टॉल किए गए ऐप्लिकेशन, सिस्टम के लिए फिर से उपलब्ध हो जाते हैं. इस ब्रॉडकास्ट को पाने के बाद, ऐप्लिकेशन आपकी सेवा से जुड़ने की कोशिश कर सकते हैं. - अलार्म सेवाएं
AlarmManagerके साथ रजिस्टर किए गए आपके अलार्म रद्द कर दिए जाएंगे. बाहरी स्टोरेज को फिर से माउंट करने पर, आपको मैन्युअल तरीके से अलार्म फिर से रजिस्टर करने होंगे.- इनपुट के तरीके के एडिटर
- आपका IME डिफ़ॉल्ट IME से बदल दिया जाएगा. बाहरी स्टोरेज को फिर से माउंट करने पर, उपयोगकर्ता सिस्टम की सेटिंग खोलकर, आपके IME को फिर से चालू कर सकता है.
- लाइव वॉलपेपर
- आपका चल रहा लाइव वॉलपेपर डिफ़ॉल्ट लाइव वॉलपेपर से बदल दिया जाएगा. बाहरी स्टोरेज को फिर से माउंट करने पर, उपयोगकर्ता आपके लाइव वॉलपेपर को फिर से चुन सकता है.
- ऐप्लिकेशन विजेट
- आपका ऐप्लिकेशन विजेट, होम स्क्रीन से हटा दिया जाएगा. बाहरी स्टोरेज को फिर से माउंट करने पर, आपका ऐप्लिकेशन विजेट, उपयोगकर्ता के लिए तब तक उपलब्ध नहीं होगा, जब तक सिस्टम होम ऐप्लिकेशन को रीसेट नहीं करता. आम तौर पर, ऐसा सिस्टम को रीबूट करने के बाद ही होता है.
- अकाउंट मैनेजर
AccountManagerकी मदद से बनाए गए आपके खाते, बाहरी स्टोरेज को फिर से माउंट करने तक गायब हो जाएंगे.- सिंक अडैप्टर
- बाहरी स्टोरेज को फिर से माउंट करने तक, आपका
AbstractThreadedSyncAdapterऔर इसकी सभी सिंक करने की सुविधाएं काम नहीं करेंगी. - डिवाइस एडमिन
- आपका
DeviceAdminReceiverऔर इसकी सभी एडमिन की क्षमताएं बंद हो जाएंगी. इससे डिवाइस की सुविधाओं पर अप्रत्याशित असर पड़ सकता है. यह असर, बाहरी स्टोरेज को फिर से माउंट करने के बाद भी बना रह सकता है. - "बूट पूरा हुआ" के लिए सुनने वाले ब्रॉडकास्ट रिसीवर
- सिस्टम, डिवाइस पर बाहरी स्टोरेज माउंट होने से पहले,
ACTION_BOOT_COMPLETEDब्रॉडकास्ट डिलीवर करता है. अगर आपका ऐप्लिकेशन बाहरी स्टोरेज पर इंस्टॉल है, तो इसे यह ब्रॉडकास्ट कभी नहीं मिल सकता.
अगर आपका ऐप्लिकेशन, ऊपर बताई गई किसी भी सुविधा का इस्तेमाल करता है, तो आपको अपने ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने की अनुमति नहीं देनी चाहिए. डिफ़ॉल्ट रूप से, सिस्टम आपके ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने की अनुमति नहीं देगा. इसलिए, आपको अपने मौजूदा ऐप्लिकेशन के बारे में चिंता करने की ज़रूरत नहीं है. हालांकि, अगर आपको पक्का है कि आपका ऐप्लिकेशन कभी भी बाहरी स्टोरेज पर इंस्टॉल नहीं होना चाहिए, तो आपको android:installLocation का एलान करके, इसकी वैल्यू "internalOnly" सेट करनी चाहिए. इससे डिफ़ॉल्ट व्यवहार में कोई बदलाव नहीं होता. हालांकि, इससे यह साफ़ तौर पर पता चलता है कि आपका ऐप्लिकेशन सिर्फ़ इंटरनल स्टोरेज पर इंस्टॉल होना चाहिए. साथ ही, यह आपको और अन्य डेवलपर को याद दिलाता है कि यह फ़ैसला लिया गया है.
ऐसे ऐप्लिकेशन जिन्हें बाहरी स्टोरेज पर इंस्टॉल किया जाना चाहिए
आसान शब्दों में कहें, तो पिछले सेक्शन में बताई गई सुविधाओं का इस्तेमाल न करने वाले किसी भी ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल किया जा सकता है. आम तौर पर, बड़े गेम ऐसे ऐप्लिकेशन होते हैं जिन्हें बाहरी स्टोरेज पर इंस्टॉल करने की अनुमति दी जानी चाहिए. ऐसा इसलिए, क्योंकि गेम आम तौर पर इनऐक्टिव होने पर, कोई अतिरिक्त सेवा नहीं देते. जब बाहरी स्टोरेज उपलब्ध नहीं होता और गेम की प्रोसेस बंद हो जाती है, तो स्टोरेज के फिर से उपलब्ध होने और उपयोगकर्ता के गेम को फिर से शुरू करने पर, कोई असर नहीं दिखना चाहिए. हालांकि, यह इस बात पर निर्भर करता है कि गेम ने सामान्य ऐक्टिविटी लाइफ़साइकलके दौरान, अपनी स्थिति को सही तरीके से सेव किया हो.
अगर आपके ऐप्लिकेशन की APK फ़ाइल के लिए कई मेगाबाइट की ज़रूरत है, तो आपको इस बारे में सोच-समझकर फ़ैसला लेना चाहिए कि ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने की अनुमति दी जाए या नहीं. इससे उपयोगकर्ता, अपने इंटरनल स्टोरेज में जगह बचा सकते हैं.
ज़्यादा जानकारी के लिए, <manifest> देखें