डेटा और फ़ाइल स्टोरेज की खास जानकारी

Android, वह फ़ाइल सिस्टम इस्तेमाल करता है जो अन्य प्लैटफ़ॉर्म के, डिस्क पर आधारित फ़ाइल सिस्टम से मेल खाता हो. आपके ऐप्लिकेशन का डेटा सेव करने के लिए, सिस्टम आपको कई विकल्प देता है:

  • ऐप्लिकेशन के लिए खास स्टोरेज: वे फ़ाइलें सेव करें जो सिर्फ़ आपके ऐप्लिकेशन के इस्तेमाल के लिए बनी हों. इन्हें इंटरनल स्टोरेज वॉल्यूम में मौजूद खास डायरेक्ट्री या बाहरी स्टोरेज में मौजूद अलग-अलग खास डायरेक्ट्री में सेव किया जा सकता है. इंटरनल स्टोरेज में मौजूद डायरेक्ट्री का इस्तेमाल करके, संवेदनशील जानकारी सेव करें. ऐसा करने से, दूसरे ऐप्लिकेशन इस जानकारी को ऐक्सेस नहीं कर पाएंगे.
  • शेयर किया गया स्टोरेज: वे फ़ाइलें सेव करें जो आपके ऐप्लिकेशन को, अन्य ऐप्लिकेशन के साथ शेयर करनी हो. इनमें मीडिया, दस्तावेज़, और अन्य फ़ाइलें शामिल हैं.
  • प्राथमिकताएं: की-वैल्यू पेयर में पुराना, निजी डेटा सेव करें.
  • डेटाबेस: Room परसिस्टेंस लाइब्रेरी का इस्तेमाल करके, स्ट्रक्चर्ड डेटा को किसी निजी डेटाबेस में सेव करें.

इन विकल्पों की खास बातों के बारे में यहां दी गई टेबल में बताया गया है:

कॉन्टेंट किस तरह का है ऐक्सेस करने का तरीका अनुमतियां ज़रूरी हैं क्या अन्य ऐप्लिकेशन इसे ऐक्सेस कर सकते हैं? क्या ऐप्लिकेशन को अनइंस्टॉल करने पर फ़ाइलें हट जाती हैं?
ऐप्लिकेशन से जुड़ी फ़ाइलें सिर्फ़ आपके ऐप्लिकेशन के इस्तेमाल के लिए बनी फ़ाइलें डिवाइस के स्टोरेज से, getFilesDir() या getCacheDir()

बाहरी मेमोरी से, getExternalFilesDir() या getExternalCacheDir()
डिवाइस की मेमोरी के लिए कभी ज़रूरी नहीं

Android 4.4 (एपीआई लेवल 19) या इसके बाद के वर्शन वाले डिवाइसों पर ऐप्लिकेशन का इस्तेमाल करने पर, बाहरी स्टोरेज के लिए ज़रूरी नहीं है
नहीं हां
मीडिया शेयर की जा सकने वाली मीडिया फ़ाइलें (इमेज, ऑडियो फ़ाइलें, वीडियो) MediaStore एपीआई READ_EXTERNAL_STORAGE Android 11 (एपीआई लेवल 30) या उसके बाद के वर्शन पर, दूसरे ऐप्लिकेशन की फ़ाइलों को ऐक्सेस करते समय

READ_EXTERNAL_STORAGE या WRITE_EXTERNAL_STORAGE Android 10 (एपीआई लेवल 29) पर, दूसरे ऐप्लिकेशन की फ़ाइलों को ऐक्सेस करते समय

Android 9 (एपीआई लेवल 28) या इससे पहले के वर्शन पर, सभी फ़ाइलों के लिए अनुमतियां ज़रूरी हैं
हां, हालांकि दूसरे ऐप्लिकेशन को READ_EXTERNAL_STORAGE की अनुमति चाहिए नहीं
दस्तावेज़ और अन्य फ़ाइलें शेयर किए जा सकने वाले अन्य तरह के कॉन्टेंट में, डाउनलोड की गई फ़ाइलें भी शामिल हैं Storage Access Framework कोई नहीं हां, सिस्टम फ़ाइल पिकर के ज़रिए नहीं
ऐप्लिकेशन की प्राथमिकताएं की-वैल्यू पेयर Jetpack Preferences लाइब्रेरी कोई नहीं नहीं हां
डेटाबेस स्ट्रक्चर्ड डेटा Room परसिस्टेंस लाइब्रेरी कोई नहीं नहीं हां

चुना गया समाधान, आपकी ज़रूरतों पर निर्भर करता है:

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

स्टोरेज की जगहों की कैटगरी

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

एसडी कार्ड जैसे हटाए जा सकने वाले वॉल्यूम, फ़ाइल सिस्टम में बाहरी स्टोरेज के तौर पर दिखते हैं. Android, इन डिवाइसों को पाथ का इस्तेमाल करके दिखाता है. जैसे, /sdcard.

ऐप्लिकेशन, डिफ़ॉल्ट रूप से मोबाइल मेमोरी में सेव होते हैं. हालांकि, अगर आपके APK का साइज़ बहुत बड़ा है, तो ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने की प्राथमिकता सेट की जा सकती है:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

बाहरी स्टोरेज को ऐक्सेस करने की अनुमतियां

Android, स्टोरेज से जुड़ी इन अनुमतियों को तय करता है: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, और MANAGE_EXTERNAL_STORAGE.

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

Android के नए वर्शन में, किसी ऐप्लिकेशन को किसी फ़ाइल का ऐक्सेस देने और उसमें बदलाव करने की अनुमति देने के लिए, फ़ाइल की जगह की जानकारी के बजाय उसके मकसद पर ज़्यादा ध्यान दिया जाता है. खास तौर पर, अगर आपका ऐप्लिकेशन Android 11 (एपीआई लेवल 30) या उसके बाद के वर्शन को टारगेट करता है, तो WRITE_EXTERNAL_STORAGE अनुमति का आपके ऐप्लिकेशन के स्टोरेज ऐक्सेस पर कोई असर नहीं पड़ता. इस मॉडल में, ऐप्लिकेशन को डिवाइस के फ़ाइल सिस्टम के सिर्फ़ उन हिस्सों का ऐक्सेस दिया जाता है जिनका वे इस्तेमाल करते हैं. इसलिए, इससे उपयोगकर्ता की निजता बेहतर होती है.

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

डिवाइस का स्कोप किया गया स्टोरेज

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

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

अपने ऐप्लिकेशन को स्कोप किए गए स्टोरेज के लिए तैयार करने के लिए, स्टोरेज के इस्तेमाल के उदाहरण और सबसे सही तरीके वाली गाइड देखें. अगर आपके ऐप्लिकेशन का कोई ऐसा इस्तेमाल है जो स्कोप किए गए स्टोरेज के दायरे में नहीं आता है, तो सुविधा के लिए अनुरोध करें. आपके पास स्कोप किए गए स्टोरेज का इस्तेमाल कुछ समय के लिए बंद करने का विकल्प होता है.

किसी डिवाइस पर मौजूद फ़ाइलें देखना

किसी डिवाइस पर सेव की गई फ़ाइलें देखने के लिए, Android Studio के डिवाइस फ़ाइल एक्सप्लोरर का इस्तेमाल करें.

अन्य संसाधन

डेटा स्टोरेज के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें.

वीडियो