Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

تخزين

رمز HAL لوحدة التخزين الخارجية لنظام Android

تطور Android بمرور الوقت لدعم مجموعة متنوعة من أنواع وميزات أجهزة التخزين. تدعم جميع إصدارات أجهزة Android المزودة بوحدة تخزين تقليدية ، والتي تتضمن تخزينًا محمولًا ومقلدًا. يمكن توفير وحدة تخزين محمولة بواسطة وسائط مادية ، مثل بطاقة SD أو USB ، المخصصة لنقل البيانات مؤقتًا / تخزين الملفات. قد تظل الوسائط المادية مع الجهاز لفترة طويلة من الوقت ، ولكنها غير مرتبطة بالجهاز ويمكن إزالتها. كانت بطاقات SD متاحة كتخزين محمول منذ Android 1.0 ؛ أضاف Android 6.0 دعم USB. يتم توفير التخزين الذي تمت مضاهاته عن طريق تعريض جزء من وحدة التخزين الداخلية من خلال طبقة محاكاة وهو متاح منذ Android 3.0.

بدءًا من Android 6.0 ، يدعم Android التخزين القابل للتبني ، والذي يتم توفيره من خلال الوسائط المادية ، مثل بطاقة SD أو USB ، والتي يتم تشفيرها وتنسيقها لتتصرف مثل وحدة التخزين الداخلية. يمكن للتخزين القابل للتبني تخزين جميع أنواع بيانات التطبيق.

أذونات

الوصول إلى وحدة التخزين الخارجية محمي بأذونات Android المختلفة. بدءًا من Android 1.0 ، يكون الوصول للكتابة محميًا بإذن WRITE_EXTERNAL_STORAGE . بدءًا من Android 4.1 ، يكون الوصول للقراءة محميًا بإذن READ_EXTERNAL_STORAGE .

بدءًا من Android 4.4 ، يتم الآن توليف المالك والمجموعة وأنماط الملفات على أجهزة التخزين الخارجية بناءً على بنية الدليل. يتيح ذلك للتطبيقات إدارة الدلائل الخاصة بالحزمة على وحدة التخزين الخارجية دون مطالبتهم WRITE_EXTERNAL_STORAGE إذن WRITE_EXTERNAL_STORAGE الواسع. على سبيل المثال ، يمكن للتطبيق الذي يحمل اسم الحزمة com.example.foo الآن الوصول بحرية إلى Android/data/com.example.foo/ على أجهزة التخزين الخارجية بدون أذونات. يتم تحقيق هذه الأذونات المركبة عن طريق تغليف أجهزة التخزين الأولية في برنامج خفي لـ FUSE.

بدءًا من Android 10 ، التطبيقات التي تستهدف Android 9 والإعدادات الافتراضية الأقل للتخزين القديم ، ويمكن أن تشترك في التخزين المعزول. يمكن للتطبيقات التي تستهدف نظام Android 10 والإعداد الافتراضي للتخزين المعزول إلغاء الاشتراك مؤقتًا . استخدم سمة البيان requestLegacyExternalStorage ، التي تتحكم في نموذج التخزين ، لتغيير الحالة الافتراضية.

لأن كلا READ_EXTERNAL_STORAGE و WRITE_EXTERNAL_STORAGE أذونات هي لينة المقيدة، إذا لم المثبت لا القائمة البيضاء التطبيق، وصول الضوابط إذن إلى مجموعات السمعية والبصرية فقط، مع عدم الوصول إلى بطاقة SD. ينطبق هذا حتى إذا طلب التطبيق مساحة تخزين قديمة. لمزيد من المعلومات حول كل من القيود الصارمة والقيود الناعمة ، راجع القيود الصارمة واللينة في Android 10 .

إذا أضاف المُثبِّت الإذن إلى القائمة البيضاء ، فإن التطبيق الذي يتم تشغيله في الوضع القديم يحصل على سلوك الإذن غير المعزول. يتحكم الإذن في الوصول إلى بطاقة SD والمجموعات السمعية والبصرية. يحدث هذا عندما يستهدف التطبيق نظام Android 9 أو إصدارًا أقل ولا يشترك في التخزين المعزول ، أو عندما يستهدف Android 10 ويتم إيقافه.

لا يمكن تحديد حالة القائمة البيضاء إلا في وقت التثبيت ، ولا يمكن تغييرها حتى يتم تثبيت التطبيق.

لمزيد من المعلومات حول تعيين إذن READ_EXTERNAL_STORAGE ، راجع setWhitelistedRestrictedPermissions() في فئة PackageInstaller.SessionParams .

أذونات وقت التشغيل

يقدم Android 6.0 نموذجًا جديدًا لأذونات وقت التشغيل حيث تطلب التطبيقات إمكانات عند الحاجة في وقت التشغيل. نظرًا لأن النموذج الجديد يتضمن أذونات READ/WRITE_EXTERNAL_STORAGE ، فإن النظام الأساسي يحتاج إلى منح الوصول إلى التخزين ديناميكيًا دون قتل أو إعادة تشغيل التطبيقات قيد التشغيل بالفعل. يقوم بذلك عن طريق الحفاظ على ثلاث مناظر مميزة لجميع أجهزة التخزين المركبة:

  • /mnt/runtime/default للتطبيقات التي لا تحتوي على أذونات تخزين خاصة ، وإلى مساحة اسم الجذر حيث يعيش adbd ومكونات النظام الأخرى.
  • /mnt/runtime/read يتم عرض /mnt/runtime/read للتطبيقات باستخدام READ_EXTERNAL_STORAGE (ضبط LEGACY_STORAGE لنظام Android 10)
  • /mnt/runtime/write يظهر للتطبيقات مع WRITE_EXTERNAL_STORAGE

في وقت Zygote fork ، نقوم بإنشاء مساحة اسم تحميل لكل تطبيق قيد التشغيل وربط تثبيت العرض الأولي المناسب في مكانه. في وقت لاحق ، عندما يتم منح أذونات وقت التشغيل ، يقفز vold إلى مساحة اسم التحميل للتطبيقات قيد التشغيل بالفعل vold ربط العرض الذي تمت ترقيته في مكانه. لاحظ أن تخفيض الأذونات يؤدي دائمًا إلى إنهاء التطبيق.

setns() وظيفة setns() المستخدمة لتنفيذ هذه الميزة Linux 3.8 على الأقل ، ولكن تم نقل التصحيحات بنجاح إلى Linux 3.4. و PermissionsHostTest اختبار CTS يمكن استخدامها للتحقق من السلوك نواة الصحيح.