إذا سبق لك أن حاولت إدارة الملفات على جهاز Android، فمن المحتمل أنك لاحظت أن الأمور تعمل بشكل مختلف اعتمادًا على إصدار Android الذي تستخدمه. بدءًا من Android 10، أدخلت Google تحولًا أساسيًا في كيفية تفاعل التطبيقات مع نظام الملفات. أدى هذا التغيير، المعروف باسم تخزين النطاق، إلى إعادة تعريف القواعد المتعلقة بقراءة الملفات وكتابتها على وحدة التخزين المشتركة. بالنسبة للمستخدمين الذين يقومون بتحميل التطبيقات، أو إدارة ملفات OBB، أو العمل مع مديري الملفات، فإن فهم التخزين المحدد أمر ضروري.
في هذه المقالة، سنستكشف المقصود بالتخزين المحدد، ولماذا نفذته Google، وكيف يؤثر على المستخدمين والمطورين العاديين، وماذا يعني بالنسبة لأي شخص يقوم بتثبيت ملفات APK أو XAPK خارج متجر Play.
المشكلة مع نموذج التخزين القديم
قبل Android 10، كان بإمكان أي تطبيق يطلب إذن READ_EXTERNAL_STORAGE أو WRITE_EXTERNAL_STORAGE الوصول إلى أي ملف تقريبًا على وحدة التخزين المشتركة للجهاز. وشمل ذلك الصور والمستندات والتنزيلات وحتى الملفات التي تم إنشاؤها بواسطة تطبيقات أخرى. وفي حين أن هذا جعل إدارة الملفات ملائمة، إلا أنه خلق مخاوف خطيرة تتعلق بالخصوصية والأمان.
فكر في تطبيق مصباح يدوي بسيط. في ظل النموذج القديم، إذا منحته إذن التخزين، فيمكنه قراءة صورك بصمت، أو مسح المستندات التي تم تنزيلها ضوئيًا، أو حتى تعديل الملفات التابعة لتطبيقات أخرى. لم يكن هناك سيطرة الحبيبية. لقد منحت أحد التطبيقات حق الوصول الكامل إلى مساحة التخزين لديك بالكامل أو رفضته تمامًا.
أدى هذا الوصول الواسع إلى مشاكل في العالم الحقيقي. قامت بعض التطبيقات بجمع بيانات المستخدم عن طريق فحص مساحة التخزين بحثًا عن الملفات الحساسة. وقد ترك آخرون وراءهم ملفات معزولة تشوش الجهاز بعد فترة طويلة من إلغاء تثبيت التطبيق. احتاجت Google إلى حل يوازن بين سهولة الاستخدام والخصوصية، وكان التخزين المحدود هو الحل.
ما يفعله التخزين النطاق في الواقع
يغير التخزين المحدد بشكل أساسي العلاقة بين التطبيقات ونظام الملفات. بموجب هذا النموذج، يحصل كل تطبيق على وضع الحماية الخاص به على وحدة التخزين الخارجية، والذي يقع عادةً في /Android/data/[package.name]/. يمكن للتطبيقات القراءة والكتابة بحرية داخل وضع الحماية الخاص بها دون الحاجة إلى أي أذونات على الإطلاق.
ومع ذلك، فإن الوصول إلى الملفات خارج نطاق الحماية هذا يتطلب المرور عبر واجهات برمجة التطبيقات الخاضعة للتحكم. وإليك كيفية عمل النموذج الجديد:
التخزين الخاص بالتطبيق
يحتوي كل تطبيق على دليل مخصص لا يمكن لأحد سواه الوصول إليه. عند إلغاء تثبيت التطبيق، يتم تنظيف هذا الدليل تلقائيًا. لا يمكن لأي تطبيق آخر القراءة أو الكتابة إلى هذا الموقع دون الوصول إلى الجذر. يؤدي هذا إلى التخلص من مشكلة الملفات المعزولة ويمنع التطفل على البيانات عبر التطبيقات.
مجموعات الوسائط
بالنسبة للوسائط المشتركة مثل الصور ومقاطع الفيديو والملفات الصوتية، يوفر Android واجهة برمجة تطبيقات MediaStore. يمكن للتطبيقات المساهمة بالوسائط في المجموعات المشتركة وقراءة الوسائط التي أنشأتها تطبيقات أخرى، ولكن فقط من خلال هذه الواجهة المنظمة. يمكن لأي تطبيق رؤية الوسائط الخاصة به دون أي إذن، ولكن الوصول إلى وسائط التطبيقات الأخرى يتطلب أذونات READ_MEDIA_IMAGES أو READ_MEDIA_VIDEO أو READ_MEDIA_AUDIO المقدمة في Android 13.
إطار الوصول إلى التخزين
بالنسبة للمستندات والملفات الأخرى غير المتعلقة بالوسائط، يجب أن تستخدم التطبيقات إطار عمل الوصول إلى التخزين (SAF). يقدم هذا منتقي ملفات النظام للمستخدم، الذي يختار بوضوح الملفات أو الأدلة التي يمكن للتطبيق الوصول إليها. لا يحصل التطبيق أبدًا على وصول شامل إلى نظام الملفات بأكمله.
إذن MANAGE_EXTERNAL_STORAGE
بالنسبة للتطبيقات التي تحتاج حقًا إلى وصول واسع للملفات، مثل مديري الملفات وأدوات النسخ الاحتياطي وبرامج مكافحة الفيروسات، يوفر Android إذن MANAGE_EXTERNAL_STORAGE. ومع ذلك، يتطلب هذا الإذن موافقة خاصة من جوجل للتطبيقات الموزعة عبر متجر Play، ويجب على المستخدمين منحه يدويًا من خلال إعدادات النظام بدلاً من مربع حوار بسيط.
الجدول الزمني للطرح
لم تفرض Google مساحة تخزين محددة بين عشية وضحاها. حدث التحول تدريجيا:
- تم تقديم التخزين ذو النطاق Android 10 (واجهة برمجة التطبيقات 29): ولكن يمكن للتطبيقات إلغاء الاشتراك باستخدام requestLegacyExternalStorage="true" في بيانها. وهذا أعطى المطورين الوقت للتكيف.
- Android 11 (واجهة برمجة التطبيقات 30): تم تجاهل العلامة القديمة للتطبيقات التي تستهدف API 30 أو أعلى. أصبح التخزين ضمن نطاق إلزاميًا للتطبيقات الجديدة والمحدثة على متجر Play.
- Android 12 وما بعده: تم إجراء المزيد من التحسينات، بما في ذلك أذونات الوسائط الدقيقة وتحسين أداء SAF.
- Android 13 (واجهة برمجة التطبيقات 33): تم إهمال إذن READ_EXTERNAL_STORAGE الواسع لصالح أذونات وسائط محددة.
- Android 14 (واجهة برمجة التطبيقات 34): تم تقديم الوصول الجزئي للصور والفيديو، مما يسمح للمستخدمين بمنح الوصول إلى ملفات محددة بدلاً من مكتبات الوسائط بأكملها.
كيف يؤثر التخزين ضمن النطاق على التحميل الجانبي
بالنسبة للمستخدمين الذين يقومون بتثبيت التطبيقات من خارج متجر Play، يقدم التخزين المحدد بعض التحديات العملية التي تستحق الفهم.
تنزيل ملفات APK والوصول إليها
عندما تقوم بتنزيل ملف APK من خلال متصفح، فإنه عادةً ما يصل إلى مجلد التنزيلات. ضمن مساحة التخزين المحددة، يمتلك تطبيق المتصفح هذا الملف. إذا كنت تريد تثبيته باستخدام تطبيق مختلف، مثل مدير الملفات، فإن مدير الملفات هذا يحتاج إلى الوصول المناسب. يتعامل معظم مديري الملفات الحديثين مع هذا الأمر بشكل صحيح من خلال SAF، لكن قد يواجه المديرون الأقدم صعوبة.
لا يزال بإمكان مثبت حزمة النظام الوصول إلى الملفات التي تحددها بشكل صريح من خلال منتقي الملفات، وبالتالي فإن التدفق الأساسي لتنزيل APK وتثبيته لا يزال يعمل. ومع ذلك، قد ينقطع سير عمل التثبيت التلقائي الذي يعتمد على الوصول المباشر إلى مسار الملف.
ملفات OBB وبيانات اللعبة
هذا هو المكان الذي يخلق فيه التخزين المحدد أكبر قدر من الاحتكاك للرافعات الجانبية. تستخدم العديد من الألعاب الكبيرة ملفات OBB (Opaque Binary Blob) المخزنة في /Android/obb/[package.name]/. في النموذج القديم، يمكنك ببساطة نسخ ملفات OBB إلى الدليل الصحيح باستخدام أي مدير ملفات.
مع التخزين المحدد النطاق، يكون دليل /Android/obb/ مقيدًا. في نظام Android 11 والإصدارات الأحدث، لا يمكن للتطبيقات العادية الكتابة إلى دليل OBB الخاص بتطبيق آخر. وهذا يعني أنه إذا قمت بتنزيل ملف XAPK يحتوي على بيانات OBB، فإن المثبت يحتاج إلى معالجة خاصة لوضع هذه الملفات بشكل صحيح.
يمكن لأدوات مثل مستخرج OBB مساعدتك في استخراج ملفات OBB من حزم XAPK، ولكن وضعها في الدليل الصحيح على إصدارات Android الأحدث قد يتطلب استخدام مدير ملفات بإذن MANAGE_EXTERNAL_STORAGE أو استخدام أوامر ADB من جهاز كمبيوتر.
اعتبارات تثبيت XAPK
تقوم ملفات XAPK بتجميع ملف APK مع بيانات OBB وفي بعض الأحيان تقسيم تكوينات APK. يتطلب تثبيتها على الأجهزة التي تعمل بنظام التشغيل Android 11 أو الإصدارات الأحدث أداة تثبيت تفهم قيود التخزين المحددة. يحتاج المثبت إما إلى الحصول على إذن MANAGE_EXTERNAL_STORAGE أو استخدام واجهات برمجة التطبيقات المناسبة لوضع ملفات OBB في الموقع الصحيح.
وهذا هو أحد الأسباب التي تجعل تحويل ملفات XAPK إلى تنسيق APK القياسي مفيدًا. لا يتطلب ملف APK المستقل وضع ملف OBB، مما يبسط عملية التثبيت على إصدارات Android الأحدث. يمكنك استخدام محول XAPK إلى APK لاستخراج ملف APK الأساسي من حزمة XAPK.
ما يحتاج المطورون إلى معرفته
إذا كنت تقوم بتطوير تطبيقات Android، فإن مساحة التخزين المحددة تتطلب إعادة التفكير في كيفية التعامل مع الملفات:
- استخدم الدلائل الخاصة بالتطبيق لأية ملفات يحتاجها تطبيقك فقط. لا تتطلب هذه أي أذونات ويتم تنظيفها تلقائيًا عند إلغاء التثبيت.
- استخدم متجر الوسائط للصور ومقاطع الفيديو والصوت التي يجب أن تكون مرئية للتطبيقات الأخرى وتستمر في عملية إلغاء التثبيت.
- استخدم القوات المسلحة السودانية عندما يحتاج تطبيقك إلى العمل مع المستندات أو الأدلة التي حددها المستخدم.
- مسارات تجنب مسارات الملفات المشفرة. مثل /sdcard/MyApp/ لم تعد موثوقة. استخدم Context.getExternalFilesDir() بدلاً من ذلك.
- يختلف سلوك اختبار على مستويات API متعددة. بشكل كبير بين إصدارات Android 10 و11 و13 و14.
استراتيجيات الهجرة
إذا كان تطبيقك قد قام مسبقًا بتخزين الملفات في مساحة تخزين مشتركة، فستحتاج إلى خطة ترحيل. الطريقة الموصى بها هي نسخ الملفات الموجودة إلى مساحة تخزين خاصة بالتطبيق عند التشغيل لأول مرة بعد التحديث، ثم حذف النسخ القديمة. استخدم Environment.getExternalStorageDirectory() مع العلامة القديمة أثناء الفترة الانتقالية لقراءة الملفات القديمة، ثم انقلها إلى الموقع الجديد.
المفاهيم الخاطئة الشائعة
"التخزين ضمن نطاق يعني أن التطبيقات لا يمكنها الوصول إلى أي ملفات"
هذا غير صحيح. لا يزال بإمكان التطبيقات الوصول إلى ملفاتها الخاصة بحرية، والمساهمة في مجموعات الوسائط المشتركة، وطلب الوصول إلى ملفات محددة من خلال منتقي النظام. ما تغير هو أن التطبيقات لم تعد قادرة على تصفح نظام الملفات بأكمله بصمت.
"مديرو الملفات معطلون في إصدارات Android الجديدة"
لا يزال مديرو الملفات الذين يطلبون MANAGE_EXTERNAL_STORAGE يعملون. يحتاج المستخدم فقط إلى منح هذا الإذن الخاص من خلال الإعدادات. لقد تكيف مديرو الملفات الأكثر شهرة بالفعل مع هذا المطلب.
"التخزين ضمن النطاق يؤثر فقط على بطاقة SD"
ينطبق التخزين المحدد على كافة وحدات التخزين المشتركة، بما في ذلك وحدة التخزين المشتركة الداخلية. يشير مصطلح "التخزين الخارجي" في Android إلى مساحة التخزين المشتركة التي يمكن الوصول إليها من خلال تطبيقات متعددة، وليس بالضرورة بطاقة SD فعلية.
نصائح عملية للمستخدمين
إذا كنت تقوم بانتظام بتحميل التطبيقات أو إدارة الملفات على جهاز Android الخاص بك، فإليك بعض التوصيات العملية:
- استخدم مدير الملفات الحديث الذي يدعم MANAGE_EXTERNAL_STORAGE. لقد تكيفت تطبيقات مثل Solid Explorer وMiXplorer وTotal Commander بشكل جيد مع مساحة التخزين المحددة.
- منح الأذونات بعناية. عندما يطلب مدير الملفات "الوصول إلى كافة الملفات"، افهم أن هذا هو إذن MANAGE_EXTERNAL_STORAGE وهو ضروري للحصول على الوظائف الكاملة.
- استخدم ADB لعمليات الملفات العنيدة. إذا لم تتمكن من وضع ملفات OBB من خلال مدير الملفات، فإن توصيل جهازك بالكمبيوتر واستخدام adb push يتجاوز قيود التخزين المحددة بالكامل.
- تحويل الحزم المعقدة إلى تنسيقات أبسط. إذا كان ملف XAPK يسبب لك مشكلة على جهاز أحدث، فقد يكون استخراج مكون APK فقط هو المسار الأقل مقاومة.
- حافظ على تحديث تطبيقات التثبيت الخاصة بك. قد لا تتعامل الإصدارات الأقدم من مثبتات XAPK مع التخزين المحدد بشكل صحيح.
مستقبل تخزين Android
تواصل Google تحسين نموذج التخزين مع كل إصدار من إصدارات Android. قدم Android 14 وصولاً جزئيًا للوسائط، مما يسمح للمستخدمين بمشاركة صور معينة مع أحد التطبيقات بدلاً من مكتبتهم بأكملها. من المتوقع أن يقدم Android 15 مزيدًا من التحسينات على أداء Storage Access Framework وسهولة استخدامه.
الاتجاه واضح: يتجه Android نحو نموذج يتمتع فيه المستخدمون بالتحكم الدقيق في ما يمكن لكل تطبيق رؤيته وتعديله. على الرغم من أن هذا يخلق بعض الاحتكاك بين المستخدمين المتميزين والقائمين بالتحميل الجانبي، إلا أنه يعمل بشكل كبير على تحسين الخصوصية والأمان لقاعدة المستخدمين الأوسع.
العمل مع وحدة التخزين ذات النطاق دون كسر بيانات التطبيق
يمثل التخزين النطاق أحد أهم التغييرات في بنية Android في السنوات الأخيرة. من خلال تقييد التطبيقات على صناديق الحماية الخاصة بها وطلب موافقة صريحة من المستخدم للوصول على نطاق أوسع، قامت Google بتحسين وضع الخصوصية للنظام الأساسي بشكل كبير. بالنسبة للمستخدمين الذين يقومون بتحميل التطبيقات وإدارة الملفات يدويًا، فإن فهم هذه القيود يساعدك على التغلب على نقاط الاحتكاك العرضية. وبالنسبة للمطورين، فإن التكيف مع مساحة التخزين المحددة ليس أمرًا اختياريًا، بل هو مطلب أساسي لتطوير Android الحديث.
تثبيت ملفات APK، ووضع ملفات OBB، وإدارة التخزين يومًا بعد يوم، كلها تعمل في نفس النظام: التخزين المحدد النطاق. بمجرد أن تفهم كيفية عمله، فأنت الشخص الذي يتحكم في جهازك، بدلاً من أن تكون تحت رحمة التطبيقات التي قد تسيء استخدام الوصول إلى الملفات على نطاق واسع.