
يتوافق Android مع الأجهزة التي تتضمّن وحدة تخزين تقليدية، والتي يتم تعريفها على أنّها نظام ملفات لا يراعي حالة الأحرف مع فئات وأوضاع أذونات POSIX غير القابلة للتغيير. يشمل مفهوم مساحة التخزين التقليدية مساحة التخزين المحاكية والمحمولة. يتم تعريف مساحة التخزين القابلة للنقل على أنّها أي مساحة تخزين خارجية لا تستخدمها النظام، وبالتالي لا يتم تنسيقها أو تشفيرها أو ربطها بجهاز معيّن. بما أنّ مساحة التخزين الخارجية التقليدية توفّر الحد الأدنى من الحماية للبيانات المخزّنة، ينبغي ألا يخزن رمز النظام البيانات الحسّاسة على مساحة التخزين الخارجية. وعلى وجه التحديد، ينبغي عدم تخزين ملفات الإعدادات والسجلّات إلا على وحدة التخزين الداخلية حيث يمكن حمايتها بفعالية.
مساحة تخزين خارجية مخصّصة لعدة مستخدمين
بدءًا من الإصدار 4.2 من نظام التشغيل Android، يمكن للأجهزة السماح بتسجيل عدة مستخدمين، ويجب أن تستوفي مساحة التخزين الخارجية القيود التالية:
- يجب أن يكون لكل مستخدم مساحة تخزين خارجية أساسية معزولة، ويجب ألا يتمكن من الوصول إلى مساحة التخزين الخارجية الأساسية للمستخدمين الآخرين.
- يجب أن يحلّ مسار
/sdcard
محلّ ملف التخزين الخارجي الأساسي الصحيح الخاص بالمستخدم استنادًا إلى المستخدم الذي تعمل العملية باسمه. - قد تتم مشاركة مساحة تخزين ملفات OBB الكبيرة في الدليل
Android/obb
بين عدة مستخدمين كإجراء تحسين. - يجب ألا تتمكن التطبيقات من الكتابة في مساحة التخزين الخارجية الثانوية، إلا في الأدلة الخاصة بالحِزم على النحو المسموح به من خلال الأذونات المجمّعة.
يستفيد التنفيذ التلقائي لهذه الميزة على النظام الأساسي من مساحات أسماء ملفّات Linux kernel لإنشاء جداول تثبيت معزولة لكل عملية تمّ تقسيمها بواسطة Zygote، ثم يستخدم عمليات الربط لتوفير مساحة التخزين الخارجية الأساسية الخاصة بالمستخدم في مساحة الاسم الخاصة هذه.
عند بدء التشغيل، ينشئ النظام خادم FUSE وحيدًا لمحاكي مساحة تخزين خارجية
في EMULATED_STORAGE_SOURCE
، وهو مخفي عن التطبيقات. بعد
تشعب Zygote، يتم ربط تثبيت الدليل الفرعي المناسب الخاص بالمستخدم
من تحت برنامج FUSE الخدمي إلى EMULATED_STORAGE_TARGET
لكي تتم معالجة مسار التخزين الخارجي بشكل صحيح للتطبيق. ولأنّ التطبيق لا يحتوي على
نقاط تثبيت يمكن الوصول إليها لتخزين المستخدمين الآخرين، لا يمكنه الوصول إلا إلى
مساحة التخزين الخاصة بالمستخدم الذي تم تشغيله باسمه.
يستخدم هذا التنفيذ أيضًا ميزة kernel للفرع الفرعي المشترَك لانتشار أحداث التثبيت من مساحة الاسم الجذر التلقائية إلى مساحات أسماء التطبيقات، مما يضمن مواصلة عمل ميزات مثل حاويات ASEC وتثبيت حِزم OBB بشكلٍ سليم. ويتم ذلك من خلال تركيب نظام الملفات الجذر على أنّه مشترَك، ثم إعادة تركيبه على أنّه تابع بعد إنشاء كل مساحة اسم Zygote.
أجهزة تخزين خارجية متعددة
بدءًا من الإصدار 4.4 من Android، يتم عرض أجهزة تخزين خارجية متعددة
للمطوّرين من خلال Context.getExternalFilesDirs()
،
Context.getExternalCacheDirs()
،
Context.getObbDirs()
.
يجب أن يمنح إذن WRITE_EXTERNAL_STORAGE
إذن الوصول بالكتابة
إلى مساحة التخزين الخارجي الأساسية على الجهاز فقط. يجب عدم
السماح للتطبيقات بالكتابة على أجهزة التخزين الخارجية الثانوية، إلا في
الأدلة الخاصة بالحِزم على النحو المسموح به من قِبل
الأذونات المجمّعة. يضمن حظر عمليات الكتابة بهذه الطريقة أن يتمكّن النظام من تنظيف
الملفات عند إلغاء تثبيت التطبيقات.
إتاحة الوسائط عبر USB
يتوافق نظام التشغيل Android 6.0 مع أجهزة التخزين المحمولة التي يتم توصيلها بالجهاز لفترة قصيرة فقط، مثل محركات الأقراص الوميضية USB. عندما يُدخل أحد المستخدمين جهازًا محمولًا جديدًا، تعرض المنصة إشعارًا للسماح له بنسخ محتويات ذلك الجهاز أو إدارتها.
في Android 6.0، يُعتبر أي جهاز غير مُعتمَد محمولًا. بما أنّه يتم توصيل مساحة التخزين المحمولة لفترة قصيرة فقط، تتجنب المنصة العمليات المكثفة، مثل فحص الوسائط. يجب أن تمر التطبيقات التابعة لجهات خارجية عبر إطار عمل الوصول إلى مساحة التخزين للتفاعل مع الملفات على مساحة التخزين المحمولة، ويتم بشكل صريح منع الوصول المباشر إليها لأسباب تتعلّق بالخصوصية والأمان.