एंड्रॉइड पारंपरिक स्टोरेज वाले उपकरणों का समर्थन करता है, जिसे अपरिवर्तनीय POSIX अनुमति वर्गों और मोड के साथ केस-असंवेदनशील फ़ाइल सिस्टम के रूप में परिभाषित किया गया है। पारंपरिक भंडारण की अवधारणा में अनुकरणीय और पोर्टेबल भंडारण शामिल है। पोर्टेबल स्टोरेज को किसी भी बाहरी स्टोरेज के रूप में परिभाषित किया जाता है जिसे सिस्टम द्वारा नहीं अपनाया जाता है और इसलिए इसे स्वरूपित और एन्क्रिप्ट नहीं किया जाता है या किसी विशिष्ट डिवाइस से जोड़ा नहीं जाता है। क्योंकि पारंपरिक बाह्य भंडारण संग्रहीत डेटा के लिए न्यूनतम सुरक्षा प्रदान करता है, सिस्टम कोड को बाहरी भंडारण पर संवेदनशील डेटा संग्रहीत नहीं करना चाहिए। विशेष रूप से, कॉन्फ़िगरेशन और लॉग फ़ाइलों को केवल आंतरिक भंडारण पर संग्रहीत किया जाना चाहिए जहां उन्हें प्रभावी ढंग से संरक्षित किया जा सके।
बहु-उपयोगकर्ता बाह्य भंडारण
एंड्रॉइड 4.2 से शुरू होकर, डिवाइस एकाधिक उपयोगकर्ताओं का समर्थन कर सकते हैं, और बाहरी स्टोरेज को निम्नलिखित बाधाओं को पूरा करना होगा:
- प्रत्येक उपयोगकर्ता के पास अपना पृथक प्राथमिक बाह्य भंडारण होना चाहिए, और अन्य उपयोगकर्ताओं के प्राथमिक बाह्य भंडारण तक पहुंच नहीं होनी चाहिए।
- जिस उपयोगकर्ता के रूप में प्रक्रिया चल रही है, उसके आधार पर
/sdcard
पथ को सही उपयोगकर्ता-विशिष्ट प्राथमिक बाह्य संग्रहण का समाधान करना चाहिए। -
Android/obb
निर्देशिका में बड़ी ओबीबी फ़ाइलों के भंडारण को अनुकूलन के रूप में कई उपयोगकर्ताओं के बीच साझा किया जा सकता है। - संश्लेषित अनुमतियों द्वारा अनुमत पैकेज-विशिष्ट निर्देशिकाओं को छोड़कर, द्वितीयक बाह्य संग्रहण ऐप्स द्वारा लिखने योग्य नहीं होना चाहिए।
इस सुविधा का डिफ़ॉल्ट प्लेटफ़ॉर्म कार्यान्वयन प्रत्येक ज़ीगोटे-फोर्क्ड प्रक्रिया के लिए अलग-अलग माउंट टेबल बनाने के लिए लिनक्स कर्नेल नेमस्पेस का लाभ उठाता है, और फिर उस निजी नेमस्पेस में सही उपयोगकर्ता-विशिष्ट प्राथमिक बाह्य भंडारण की पेशकश करने के लिए बाइंड माउंट का उपयोग करता है।
बूट पर, सिस्टम EMULATED_STORAGE_SOURCE
पर एक एकल अनुकरणित बाहरी स्टोरेज FUSE डेमॉन को माउंट करता है, जो ऐप्स से छिपा होता है। जाइगोट फोर्क्स के बाद, यह FUSE डेमॉन के तहत उपयुक्त उपयोगकर्ता-विशिष्ट उपनिर्देशिका को EMULATED_STORAGE_TARGET
पर माउंट करता है ताकि ऐप के लिए बाहरी स्टोरेज पथ सही ढंग से हल हो जाएं। क्योंकि किसी ऐप में अन्य उपयोगकर्ताओं के स्टोरेज के लिए पहुंच योग्य माउंट पॉइंट का अभाव होता है, वे केवल उस उपयोगकर्ता के लिए स्टोरेज तक पहुंच सकते हैं जिसके रूप में इसे शुरू किया गया था।
यह कार्यान्वयन डिफ़ॉल्ट रूट नेमस्पेस से माउंट इवेंट को ऐप नेमस्पेस में प्रसारित करने के लिए साझा सबट्री कर्नेल सुविधा का भी उपयोग करता है, जो यह सुनिश्चित करता है कि एएसईसी कंटेनर और ओबीबी माउंटिंग जैसी सुविधाएं सही ढंग से काम करती रहें। यह रूटफ़्स को साझा के रूप में माउंट करके और फिर प्रत्येक ज़ीगोट नेमस्पेस बनने के बाद इसे स्लेव के रूप में रीमाउंट करके करता है।
एकाधिक बाह्य भंडारण उपकरण
एंड्रॉइड 4.4 से शुरू होकर, कई बाहरी स्टोरेज डिवाइस Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
और Context.getObbDirs()
के माध्यम से डेवलपर्स के सामने पेश किए जाते हैं।
WRITE_EXTERNAL_STORAGE
अनुमति को केवल डिवाइस पर प्राथमिक बाहरी स्टोरेज तक लिखने की पहुंच प्रदान करनी चाहिए। ऐप्स को उनके पैकेज-विशिष्ट निर्देशिकाओं को छोड़कर, जैसा कि संश्लेषित अनुमतियों द्वारा अनुमति है, द्वितीयक बाह्य भंडारण उपकरणों पर लिखने की अनुमति नहीं दी जानी चाहिए। इस तरह से लिखने पर प्रतिबंध यह सुनिश्चित करता है कि एप्लिकेशन अनइंस्टॉल होने पर सिस्टम फ़ाइलों को साफ़ कर सकता है।
यूएसबी मीडिया समर्थन
एंड्रॉइड 6.0 पोर्टेबल स्टोरेज डिवाइस का समर्थन करता है जो केवल थोड़े समय के लिए डिवाइस से कनेक्ट होते हैं, जैसे यूएसबी फ्लैश ड्राइव। जब कोई उपयोगकर्ता एक नया पोर्टेबल डिवाइस डालता है, तो प्लेटफ़ॉर्म उन्हें उस डिवाइस की सामग्री को कॉपी करने या प्रबंधित करने की अनुमति देने के लिए एक अधिसूचना दिखाता है।
एंड्रॉइड 6.0 में, कोई भी उपकरण जिसे अपनाया नहीं जाता है उसे पोर्टेबल माना जाता है। क्योंकि पोर्टेबल स्टोरेज केवल थोड़े समय के लिए जुड़ा होता है, प्लेटफ़ॉर्म मीडिया स्कैनिंग जैसे भारी संचालन से बचता है। पोर्टेबल स्टोरेज पर फ़ाइलों के साथ इंटरैक्ट करने के लिए थर्ड-पार्टी ऐप्स को स्टोरेज एक्सेस फ्रेमवर्क से गुजरना होगा; गोपनीयता और सुरक्षा कारणों से सीधी पहुंच स्पष्ट रूप से अवरुद्ध है।