يستخدم نظام التشغيل Android نظام ملفات مشابهًا لأنظمة الملفات المستندة إلى القرص على منصات أخرى. يقدّم لك النظام عدة خيارات لحفظ بيانات تطبيقك:
- مساحة التخزين الخاصة بالتطبيق: يمكنك تخزين الملفات المخصّصة لاستخدام تطبيقك فقط، سواء في أدلة مخصّصة ضمن وحدة تخزين داخلية أو أدلة مخصّصة مختلفة ضمن مساحة تخزين خارجية. استخدِم الأدلة ضمن مساحة التخزين الداخلية لحفظ المعلومات الحسّاسة التي لا يُسمَح للتطبيقات الأخرى بالوصول إليها.
- مساحة التخزين المشتركة: يمكنك تخزين الملفات التي يريد تطبيقك مشاركتها مع تطبيقات أخرى، بما في ذلك الوسائط والمستندات والملفات الأخرى.
- الإعدادات المفضّلة: تخزين البيانات الأولية والخاصة في أزواج مفتاح/قيمة
- قواعد البيانات: تخزين البيانات المنظَّمة في قاعدة بيانات خاصة باستخدام مكتبة Room للحفاظ على البيانات
تم تلخيص خصائص هذه الخيارات في الجدول التالي:
نوع المحتوى | طريقة الوصول | الأذونات المطلوبة | هل يمكن للتطبيقات الأخرى الوصول إلى هذه البيانات؟ | هل تتم إزالة الملفات عند إلغاء تثبيت التطبيق؟ | |
---|---|---|---|---|---|
ملفّات متعلقة بالتطبيق | الملفات المخصّصة لاستخدام تطبيقك فقط | من وحدة التخزين الداخلية، getFilesDir() أو
getCacheDir() من وحدة التخزين الخارجية، getExternalFilesDir() أو
getExternalCacheDir() |
لا تكون هذه الأذونات مطلوبة أبدًا لوحدة التخزين الداخلية لا تكون هذه الأذونات مطلوبة لوحدة التخزين الخارجية عند استخدام تطبيقك على الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 19 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث |
لا | نعم |
الوسائط | ملفات الوسائط القابلة للمشاركة (الصور والملفات الصوتية والفيديوهات) | واجهة برمجة تطبيقات MediaStore |
READ_EXTERNAL_STORAGE عند الوصول إلى ملفات تطبيقات أخرى على
نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) أو إصدار أحدثREAD_EXTERNAL_STORAGE أو WRITE_EXTERNAL_STORAGE
عند الوصول إلى ملفات تطبيقات أخرى على Android 10 (المستوى 29 لواجهة برمجة التطبيقات)تكون الأذونات مطلوبة لجميع الملفات على Android 9 (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم |
نعم، ولكن يجب أن يحصل التطبيق الآخر على إذن READ_EXTERNAL_STORAGE
. |
لا |
المستندات والملفات الأخرى | أنواع أخرى من المحتوى القابل للمشاركة، بما في ذلك الملفات التي تم تنزيلها | إطار عمل الوصول إلى مساحة التخزين | بدون تحديد نمط | نعم، من خلال أداة اختيار ملفات النظام | لا |
الإعدادات المفضّلة للتطبيقات | أزواج المفتاح/القيمة | مكتبة الإعدادات المفضّلة في Jetpack | بدون تحديد نمط | لا | نعم |
قاعدة البيانات | البيانات المهيكلة | مكتبة Room للحفاظ على البيانات | بدون تحديد نمط | لا | نعم |
يعتمد الحل الذي تختاره على احتياجاتك المحدّدة:
- ما مقدار المساحة التي تتطلّب بياناتك؟
- تتوفّر مساحة محدودة في وحدة التخزين الداخلية للبيانات الخاصة بالتطبيقات. استخدِم أنواعًا أخرى من مساحة التخزين إذا كنت بحاجة إلى حفظ كمية كبيرة من البيانات.
- ما مدى موثوقية الوصول إلى البيانات؟
- إذا كانت الوظيفة الأساسية لتطبيقك تتطلّب بيانات معيّنة، مثل عند بدء تشغيل تطبيقك، يجب وضع البيانات في دليل وحدة التخزين الداخلية أو في قاعدة بيانات. لا يمكن الوصول دائمًا إلى الملفات الخاصة بالتطبيق والمخزّنة في مساحة التخزين الخارجية، لأنّ بعض الأجهزة تسمح للمستخدمين بإزالة جهاز فعلي يرتبط بمساحة التخزين الخارجية.
- ما هو نوع البيانات التي تحتاج إلى تخزينها؟
- إذا كانت لديك بيانات مفيدة فقط لتطبيقك، يمكنك استخدام مساحة التخزين الخاصة بالتطبيقات. بالنسبة إلى محتوى الوسائط القابل للمشاركة، استخدِم مساحة التخزين المشتركة حتى تتمكن التطبيقات الأخرى من الوصول إلى المحتوى. بالنسبة إلى البيانات المنظَّمة، استخدِم الإعدادات المفضّلة (لبيانات ملفّ القيمة/المفتاح) أو قاعدة بيانات (للبيانات التي تحتوي على أكثر من عمودَين).
- هل يجب أن تكون البيانات خاصة بتطبيقك؟
- عند تخزين البيانات الحسّاسة، أي البيانات التي لا يُسمَح بالوصول إليها من أي تطبيق آخر، استخدِم وحدة التخزين الداخلية أو الإعدادات المفضّلة أو قاعدة بيانات. توفّر وحدة التخزين الداخلية ميزة إضافية تتمثل في إخفاء البيانات عن المستخدمين.
فئات مواقع التخزين
يوفّر نظام التشغيل Android نوعَين من مواقع التخزين المادية: وحدة التخزين الداخلية و وحدة التخزين الخارجية. في معظم الأجهزة، تكون مساحة التخزين الداخلية أصغر من مساحة التخزين الخارجية. ومع ذلك، تتوفّر مساحة التخزين الداخلية دائمًا على جميع الأجهزة، ما يجعلها مكانًا أكثر موثوقية لوضع البيانات التي يعتمد عليها تطبيقك.
تظهر وحدات التخزين القابلة للإزالة، مثل بطاقة SD، في نظام الملفات كجزء من
وحدة التخزين الخارجية. ويمثل Android هذه الأجهزة باستخدام مسار، مثل
/sdcard
.
يتم تلقائيًا تخزين التطبيقات نفسها في وحدة التخزين الداخلية. إذا كان حجم حزمة APK كبيرًا جدًا، يمكنك تحديد الإعداد المفضّل في ملف بيان تطبيقك لتثبيت تطبيقك على مساحة التخزين الخارجية بدلاً من ذلك:
<manifest ... android:installLocation="preferExternal"> ... </manifest>
الأذونات والوصول إلى مساحة التخزين الخارجية
يحدِّد Android الأذونات التالية المتعلّقة بمساحة التخزين:
READ_EXTERNAL_STORAGE
،
WRITE_EXTERNAL_STORAGE
،
و
MANAGE_EXTERNAL_STORAGE
.
في الإصدارات السابقة من Android، كان على التطبيقات تقديم بيان عن إذن
READ_EXTERNAL_STORAGE
للوصول إلى أي ملف خارج الأدلّة
الخاصة بالتطبيقات على وحدة التخزين الخارجية.
بالإضافة إلى ذلك، كان على التطبيقات الإفصاح عن إذن WRITE_EXTERNAL_STORAGE
لكتابة
أي ملف خارج الدليل الخاص بالتطبيق.
تعتمد الإصدارات الأحدث من Android على الغرض من الملف أكثر من موقعه الجغرافي
لتحديد قدرة التطبيق على الوصول إلى ملف معيّن والتعديل فيه. على سبيل المثال، إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو إصدارًا أحدث، لن يكون للإذن
WRITE_EXTERNAL_STORAGE
أي تأثير على إذن
وصول تطبيقك إلى مساحة التخزين. يُحسِّن نموذج التخزين المستنِد إلى الغرض من الخصوصية للمستخدمين،
لأنّ التطبيقات لا تحصل على إذن الوصول إلا إلى أجزاء نظام ملفات الجهاز التي تستخدمها
فعليًا.
يقدّم نظام التشغيل Android 11 إذن MANAGE_EXTERNAL_STORAGE
الذي يمنح
إذن الوصول للكتابة إلى الملفات خارج الدليل الخاص بالتطبيق وMediaStore
. لمزيد من المعلومات عن هذا الإذن وسبب عدم حاجة معظم التطبيقات إلى الإفصاح عنه لإكمال حالات الاستخدام، يمكنك الاطّلاع على الدليل حول كيفية إدارة جميع
الملفات على جهاز تخزين.
التخزين الفرعي
لمنح المستخدمين مزيدًا من التحكّم في ملفاتهم والحدّ من فوضى الملفات، تحصل التطبيقات التي تستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) والإصدارات الأحدث تلقائيًا على إذن وصول محدد النطاق إلى مساحة التخزين الخارجية. ولا يمكن لهذه التطبيقات الوصول إلا إلى الدليل الخاص بالتطبيق على مساحة التخزين الخارجية، بالإضافة إلى أنواع معيّنة من الوسائط التي أنشأها التطبيق.
استخدِم ميزة "التخزين الفرعي" ما لم يكن تطبيقك بحاجة إلى الوصول إلى ملف مخزّن خارج
دليل خاص بالتطبيق وخارج
دليل يمكن لوجهات برمجة التطبيقات MediaStore
الوصول إليه. إذا كنت تخزِّن ملفات خاصة بالتطبيق في مساحة تخزين خارجية، يمكنك
تسهيل استخدام ميزة "التخزين الفرعي" من خلال وضع هذه الملفات في
دليل خاص بالتطبيق في مساحة التخزين
الخارجية. بهذه الطريقة، يحافظ تطبيقك
على إمكانية الوصول إلى هذه الملفات عند تفعيل ميزة "مساحة التخزين ذات النطاق المحدّد".
لإعداد تطبيقك لمساحة التخزين المخصّصة، يمكنك الاطّلاع على دليل حالات استخدام مساحة التخزين وأفضل الممارسات. إذا كان للتطبيق حالة استخدام أخرى لا تغطيها مساحة التخزين ذات النطاق الواسع، يمكنك تقديم طلب ميزة. يمكنك إيقاف استخدام "مساحة التخزين على مستوى التطبيق" مؤقتًا.
عرض الملفات على جهاز
لعرض الملفات المخزّنة على جهاز، استخدِم مستكشفملفات الجهاز في "استوديو Android".
مصادر إضافية
لمزيد من المعلومات عن تخزين البيانات، يُرجى الاطّلاع على المراجع التالية.