भंडारण

एंड्रॉइड बाहरी भंडारण एचएएल आइकन

एंड्रॉइड समय के साथ कई प्रकार के स्टोरेज डिवाइस प्रकारों और सुविधाओं का समर्थन करने के लिए विकसित हुआ है। साथ एंड्रॉयड समर्थन उपकरणों के सभी संस्करणों पारंपरिक भंडारण जो पोर्टेबल और अनुकरणीय भंडारण भी शामिल है,। पोर्टेबल भंडारण एक एसडी कार्ड या यूएसबी, अस्थायी आंकड़ा अंतरण / फ़ाइल भंडारण के लिए है कि जैसे, शारीरिक मीडिया द्वारा प्रदान की जा सकती है। भौतिक मीडिया लंबे समय तक डिवाइस के साथ रह सकता है, लेकिन डिवाइस से जुड़ा नहीं है और इसे हटाया जा सकता है। एंड्रॉइड 1.0 के बाद से एसडी कार्ड पोर्टेबल स्टोरेज के रूप में उपलब्ध हैं; एंड्रॉइड 6.0 ने यूएसबी सपोर्ट जोड़ा। नकल करते भंडारण एक अनुकरण परत के माध्यम से आंतरिक भंडारण के एक हिस्से को उजागर द्वारा प्रदान की जाती है और Android 3.0 बाद से उपलब्ध है।

Android 6.0 में शुरू, एंड्रॉयड का समर्थन करता है ग्रहणीय भंडारण जो एक एसडी कार्ड या यूएसबी, कि एन्क्रिप्टेड और आंतरिक भंडारण की तरह व्यवहार करने के लिए स्वरूपित किया गया है की तरह, शारीरिक मीडिया द्वारा प्रदान की जाती है,। एडॉप्टेबल स्टोरेज सभी प्रकार के एप्लिकेशन डेटा को स्टोर कर सकता है।

अनुमतियां

बाहरी संग्रहण तक पहुंच विभिन्न Android अनुमतियों द्वारा सुरक्षित है। एंड्रॉयड 1.0 में शुरू, लेखन पहुँच के साथ सुरक्षित है WRITE_EXTERNAL_STORAGE अनुमति। Android 4.1 में शुरू, पढ़ने के उपयोग के साथ सुरक्षित है READ_EXTERNAL_STORAGE अनुमति।

एंड्रॉइड 4.4 में शुरू होकर, बाहरी स्टोरेज डिवाइस पर फाइलों के मालिक, समूह और मोड को अब निर्देशिका संरचना के आधार पर संश्लेषित किया जाता है। यह क्षुधा वे व्यापक पकड़ की आवश्यकता के बिना बाह्य भंडारण पर अपने पैकेज-विशिष्ट निर्देशिका का प्रबंधन करने के लिए सक्षम बनाता है WRITE_EXTERNAL_STORAGE अनुमति। उदाहरण के लिए, के साथ पैकेज का नाम एप्लिकेशन com.example.foo अब स्वतंत्र रूप से उपयोग कर सकते हैं Android/data/com.example.foo/ कोई अनुमति के साथ बाह्य संग्रहण उपकरण पर। इन संश्लेषित अनुमतियों को FUSE डेमॉन में कच्चे भंडारण उपकरणों को लपेटकर पूरा किया जाता है।

एंड्रॉयड 10 में शुरू, एप्लिकेशन कि लक्ष्य एंड्रॉयड 9 और विरासत भंडारण के लिए कम डिफ़ॉल्ट, और पृथक भंडारण करने के लिए विकल्प चुन सकते हैं। ऐसे ऐप्स जो लक्ष्य एंड्रॉयड 10 और पृथक भंडारण करने के लिए डिफ़ॉल्ट अस्थायी रूप से इससे बाहर निकल सकते हैं। प्रकट विशेषता का उपयोग करें requestLegacyExternalStorage , जो भंडारण मॉडल को नियंत्रित करता है, डिफ़ॉल्ट स्थिति बदलने के लिए।

चूंकि दोनों READ_EXTERNAL_STORAGE और WRITE_EXTERNAL_STORAGE अनुमतियाँ नरम-प्रतिबंधित, अगर संस्थापक श्वेत सूची ऐप्लिकेशन केवल कर्ण और दृश्य संग्रह करने की अनुमति नियंत्रण का उपयोग नहीं किया है, एसडी कार्ड के लिए कोई उपयोग के साथ कर रहे हैं। यह तब भी लागू होता है, जब ऐप लीगेसी स्टोरेज का अनुरोध करता है। दोनों कठिन प्रतिबंध और नरम प्रतिबंध के बारे में अधिक जानकारी के लिए, हार्ड और एंड्रॉयड 10 में नरम प्रतिबंध

अगर इंस्टॉलर ने अनुमति को श्वेतसूची में डाल दिया है, तो लीगेसी मोड में चलने वाले ऐप को गैर-पृथक अनुमति व्यवहार मिलता है। अनुमति एसडी कार्ड पहुंच, और कर्ण और दृश्य संग्रह को नियंत्रित करती है। ऐसा तब होता है जब या तो ऐप एंड्रॉइड 9 या उससे कम को लक्षित करता है और अलग-अलग स्टोरेज में ऑप्ट इन नहीं करता है, या यह एंड्रॉइड 10 को लक्षित करता है और ऑप्ट आउट करता है।

श्वेतसूची स्थिति केवल इंस्टॉल समय पर निर्दिष्ट की जा सकती है, और ऐप इंस्टॉल होने तक इसे बदला नहीं जा सकता है।

सेटअप के संबंध में अधिक जानकारी के लिए READ_EXTERNAL_STORAGE अनुमति, देख setWhitelistedRestrictedPermissions() में PackageInstaller.SessionParams वर्ग।

रनटाइम अनुमतियाँ

Android 6.0 द्वारा प्रस्तुत एक नया क्रम अनुमतियाँ मॉडल जब कार्यावधि में की जरूरत है, जहां क्षुधा क्षमताओं का अनुरोध करें। क्योंकि नए मॉडल भी शामिल READ/WRITE_EXTERNAL_STORAGE अनुमति, मारे गए या पहले से ही चल रहे एप्लिकेशन पुन: प्रारंभ करने के बिना गतिशील रूप से अनुदान भंडारण का उपयोग करने के लिए मंच की जरूरत है। यह सभी माउंटेड स्टोरेज डिवाइस के तीन अलग-अलग दृश्यों को बनाए रखते हुए ऐसा करता है:

  • /mnt/runtime/default जड़ नाम स्थान जहां के लिए किसी विशेष भंडारण अनुमति के साथ क्षुधा को दिखाया गया है, और adbd और अन्य सिस्टम घटकों रहते हैं।
  • /mnt/runtime/read के साथ क्षुधा को दिखाया गया है READ_EXTERNAL_STORAGE (सेट LEGACY_STORAGE एंड्रॉयड 10 के लिए)
  • /mnt/runtime/write के साथ क्षुधा को दिखाया गया है WRITE_EXTERNAL_STORAGE

ज़ीगोट फोर्क समय पर, हम प्रत्येक चल रहे ऐप के लिए एक माउंट नेमस्पेस बनाते हैं और उचित प्रारंभिक दृश्य को जगह में बांधते हैं। बाद में, जब क्रम अनुमतियाँ प्रदान किए जाते हैं, vold पहले से ही चल रहे एप्लिकेशन और बाँध माउंट जगह में अपग्रेड किए गए दृश्य का नाम स्थान माउंट में कूदता। ध्यान दें कि अनुमति डाउनग्रेड के परिणामस्वरूप हमेशा ऐप को मार दिया जाता है।

setns() इस सुविधा को लागू करने के लिए इस्तेमाल की कार्यक्षमता कम से कम लिनक्स 3.8 आवश्यकता है, लेकिन पैच लिनक्स 3.4 करने के लिए सफलतापूर्वक बैकपोर्टेड किया गया है। PermissionsHostTest सीटीएस परीक्षण सही गिरी व्यवहार को सत्यापित करने के लिए इस्तेमाल किया जा सकता।