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