Android, अन्य प्लैटफ़ॉर्म पर डिस्क-आधारित फ़ाइल सिस्टम से मिलते-जुलते फ़ाइल सिस्टम का इस्तेमाल करता है. आपके ऐप्लिकेशन का डेटा सेव करने के लिए, सिस्टम आपको कई विकल्प देता है:
- ऐप्लिकेशन के लिए खास तौर पर दिया गया स्टोरेज: ऐसी फ़ाइलें सेव करें जो सिर्फ़ आपके ऐप्लिकेशन के लिए हों. इन्हें इंटरनल स्टोरेज वॉल्यूम में मौजूद खास डायरेक्ट्री या बाहरी स्टोरेज में मौजूद अलग-अलग खास डायरेक्ट्री में सेव किया जा सकता है. संवेदनशील जानकारी को सेव करने के लिए, इंटरनल स्टोरेज में मौजूद डायरेक्ट्री का इस्तेमाल करें, ताकि अन्य ऐप्लिकेशन उसे ऐक्सेस न कर पाएं.
- शेयर किया गया स्टोरेज: ऐसी फ़ाइलें सेव करें जिन्हें आपका ऐप्लिकेशन अन्य ऐप्लिकेशन के साथ शेयर करना चाहता है. इनमें मीडिया, दस्तावेज़, और अन्य फ़ाइलें शामिल हैं.
- Preferences: निजी और प्रिमिटिव डेटा को की-वैल्यू पेयर में सेव करें.
- डेटाबेस: रूम परसिस्टेंस लाइब्रेरी का इस्तेमाल करके, स्ट्रक्चर्ड डेटा को निजी डेटाबेस में सेव करें.
इन विकल्पों की खास जानकारी यहां दी गई टेबल में दी गई है:
| कॉन्टेंट किस तरह का है | ऐक्सेस करने का तरीका | अनुमतियां ज़रूरी हैं | क्या अन्य ऐप्लिकेशन इसे ऐक्सेस कर सकते हैं? | क्या ऐप्लिकेशन अनइंस्टॉल करने पर फ़ाइलें हट जाती हैं? | |
|---|---|---|---|---|---|
| ऐप्लिकेशन के हिसाब से फ़ाइलें | सिर्फ़ आपके ऐप्लिकेशन के इस्तेमाल के लिए बनाई गई फ़ाइलें | डिवाइस के स्टोरेज से, getFilesDir() या
getCacheDir()बाहरी स्टोरेज से, getExternalFilesDir() या
getExternalCacheDir() |
इंटरनल स्टोरेज के लिए कभी ज़रूरत नहीं होती एक्सटर्नल स्टोरेज के लिए तब ज़रूरत नहीं होती, जब आपके ऐप्लिकेशन का इस्तेमाल Android 4.4 (एपीआई लेवल 19) या इसके बाद के वर्शन वाले डिवाइसों पर किया जाता है |
नहीं | हां |
| मीडिया | शेयर की जा सकने वाली मीडिया फ़ाइलें (इमेज, ऑडियो फ़ाइलें, वीडियो) | MediaStore API |
READ_EXTERNAL_STORAGE Android 11 (एपीआई लेवल 30) या इसके बाद के वर्शन पर, अन्य ऐप्लिकेशन की फ़ाइलों को ऐक्सेस करते समयREAD_EXTERNAL_STORAGE या WRITE_EXTERNAL_STORAGE
Android 10 (एपीआई लेवल 29) पर, अन्य ऐप्लिकेशन की फ़ाइलों को ऐक्सेस करते समयAndroid 9 (एपीआई लेवल 28) या इससे पहले के वर्शन पर, सभी फ़ाइलों के लिए अनुमतियां ज़रूरी हैं |
हां, लेकिन दूसरे ऐप्लिकेशन के पास READ_EXTERNAL_STORAGE
की अनुमति होनी चाहिए |
नहीं |
| दस्तावेज़ और अन्य फ़ाइलें | शेयर किया जा सकने वाला अन्य तरह का कॉन्टेंट, जिसमें डाउनलोड की गई फ़ाइलें शामिल हैं | स्टोरेज ऐक्सेस फ़्रेमवर्क | कोई नहीं | हां, सिस्टम फ़ाइल पिकर के ज़रिए | नहीं |
| ऐप्लिकेशन की प्राथमिकताएं | की-वैल्यू पेयर | Jetpack Preferences लाइब्रेरी | कोई नहीं | नहीं | हां |
| स्थानीय डेटाबेस | डिवाइस पर मौजूद स्ट्रक्चर्ड रिलेशनल डेटा | रूम परसिस्टेंस लाइब्रेरी 1 | कोई नहीं | नहीं | हां |
| क्लाउड पर होस्ट किए गए डेटाबेस | एक से ज़्यादा डिवाइसों पर सिंक किया गया डेटा, रीयल-टाइम में साथ मिलकर काम करने की सुविधा | Cloud Firestore, Firebase SQL Connect | INTERNET |
सिर्फ़ क्लाउड बैकएंड का इस्तेमाल करना | SDK टूल की कैश मेमोरी मिटा दी जाती है, लेकिन क्लाउड डेटा सेव रहता है |
| क्लाउड-होस्टेड ऑब्जेक्ट स्टोरेज | अनस्ट्रक्चर्ड डेटा (जैसे, मीडिया, बड़ी फ़ाइलें या बैकअप) | Firebase के लिए Cloud Storage | INTERNET |
सिर्फ़ क्लाउड बैकएंड का इस्तेमाल करना | SDK टूल की कैश मेमोरी मिटा दी जाती है, लेकिन क्लाउड डेटा सेव रहता है |
1 सभी डिवाइसों पर लोकल रूम डेटाबेस को सिंक करने के लिए, रूम को क्लाउड बैकएंड के साथ जोड़ें या Firebase जैसे मैनेज किए जा रहे सिंक करने के समाधानों का इस्तेमाल करें.
आपको कौनसा समाधान चुनना चाहिए, यह आपकी ज़रूरतों पर निर्भर करता है:
- आपके डेटा को कितनी जगह की ज़रूरत है?
- डिवाइस के स्टोरेज में, ऐप्लिकेशन के डेटा के लिए सीमित जगह होती है. अगर आपको बहुत ज़्यादा डेटा सेव करना है, तो अन्य तरह के स्टोरेज का इस्तेमाल करें.
- डेटा ऐक्सेस कितना भरोसेमंद होना चाहिए?
- अगर आपके ऐप्लिकेशन के बुनियादी फ़ंक्शन के लिए कुछ डेटा की ज़रूरत है, जैसे कि जब आपका ऐप्लिकेशन शुरू हो रहा हो, तो डेटा को इंटरनल स्टोरेज डायरेक्ट्री या डेटाबेस में सेव करें. बाहरी स्टोरेज में सेव की गई, ऐप्लिकेशन के लिए खास तौर पर बनाई गई फ़ाइलें हमेशा ऐक्सेस नहीं की जा सकतीं. ऐसा इसलिए, क्योंकि कुछ डिवाइसों पर उपयोगकर्ताओं को बाहरी स्टोरेज से जुड़े फ़िज़िकल डिवाइस को हटाने की अनुमति होती है.
- आपको किस तरह का डेटा सेव करना है?
- अगर आपके पास ऐसा डेटा है जो सिर्फ़ आपके ऐप्लिकेशन के लिए काम का है, तो ऐप्लिकेशन के लिए खास तौर पर उपलब्ध स्टोरेज का इस्तेमाल करें. शेयर किए जा सकने वाले मीडिया कॉन्टेंट के लिए, शेयर किए गए स्टोरेज का इस्तेमाल करें, ताकि अन्य ऐप्लिकेशन भी कॉन्टेंट को ऐक्सेस कर सकें. स्ट्रक्चर्ड डेटा के लिए, प्राथमिकताएं (की-वैल्यू डेटा के लिए) या डेटाबेस (दो से ज़्यादा कॉलम वाले डेटा के लिए) का इस्तेमाल करें.
- क्या डेटा को आपके ऐप्लिकेशन के लिए निजी होना चाहिए?
- संवेदनशील डेटा को सेव करते समय, इंटरनल स्टोरेज, सेटिंग या डेटाबेस का इस्तेमाल करें. संवेदनशील डेटा ऐसा डेटा होता है जिसे किसी दूसरे ऐप्लिकेशन से ऐक्सेस नहीं किया जाना चाहिए. इंटरनल स्टोरेज का एक फ़ायदा यह है कि इसमें मौजूद डेटा, उपयोगकर्ताओं को नहीं दिखता.
स्टोरेज की जगहों की कैटगरी
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 के डिवाइस फ़ाइल एक्सप्लोरर का इस्तेमाल करें.
अन्य संसाधन
डेटा स्टोरेज के बारे में ज़्यादा जानने के लिए, यहां दिए गए लेख पढ़ें.