كود Android 3.2+ (عن غير قصد؟) يمنع الوصول للكتابة إلى وحدة التخزين الخارجية

يبدو أن Google لديها خطأ في كود AOSP الخاص بها والذي تم تقديمه حول Android 3.2، مما يؤثر على كيفية تعامل نظام التشغيل مع وحدة تخزين USB ويمكن أن يمنع الوصول للكتابة إلى بطاقات SD ووحدات تخزين USB. مطور XDA Elite المعترف به، ومشرف أول، و كاتب أخبارنار متسلسلة يلخص المسألة في كتابه مشاركة مدونة:

في الماضي، كان التطبيق يطلب "WRITE_EXTERNAL_STORAGE" إذن، والذي من شأنه أن يمنح حق الوصول للكتابة إلى الجميع المخازن الخارجية (مستخدم/مجموعة"sdcard_rw"). يبدو أن هذا قد تم تغييره لمنح حق الوصول للكتابة فقط إلى ملف أساسي تخزين خارجي. تم تقديم إذن ثانٍ يسمى "WRITE_MEDIA_STORAGE"، والذي من شأنه أن يمنح الوصول إلى وحدات التخزين الخارجية الأخرى (المستخدم/المجموعة"media_rw").

تكمن المشكلة في أنه لن يتم منح هذا الإذن لطرف ثالث فعليًا، بل سيتم عادةً منح هذا الإذن فقط لتطبيقات النظام والتطبيقات التي توفرها الشركة المصنعة للجهاز. هناك استثناءات، على ما يبدو أنه سيتم منح تطبيقات الطرف الثالث هذا الإذن في بعض الأجهزة، ولكن وفقًا لمصادر AOSP، فمن المؤكد أنه ليس من المفترض أن تفعل ذلك.

أثناء قيام Chainfire بالتحقيق في المشكلة، عثر على رمز في ملف /system/vold/Volume.cpp التي تنص صراحة على:

 إذا (التخزين الأساسي) {

// حالة خاصة بطاقة SD الأساسية.

// لهذا نمنح حق الوصول للكتابة إلى مجموعة SDCARD_RW.

gid = AID_SDCARD_RW;

} آخر {

// بالنسبة للتخزين الخارجي الثانوي، نبقي الأشياء مغلقة.

gid = AID_MEDIA_RW;

}

في العديد من الأجهزة، يعتبر الفلاش الداخلي "بطاقة SD الأساسية". ال حقيقي تصبح بطاقة SD بعد ذلك وحدة التخزين الخارجية الثانوية، ويتم تأمينها بواسطة ما لا يمكن الوصول إليه "WRITE_MEDIA_STORAGE" إذن.

أرسل Chainfire سؤاله إلى ساعات عمل مطوري Android الفريق، وانتهى بهم الأمر بمناقشته في جلسة Hangout حية في 11 أبريل. لسوء الحظ، لم يتمكن مهندسو Google الموجودون في جلسة Hangout من تقديم أي إجابات حقيقية، نظرًا لأن هذه مشكلة معقدة وتم طرح السؤال قبل ساعة فقط من بدء العرض. ومع ذلك، فقد وعدوا بالوصول إلى جوهر هذه المشكلة، والعودة إلى Chainfire (ولنا) في وقت لاحق.

أيضًا وفقًا لـ Chainfire، فإن المشكلة موجودة بالفعل في إصدارات ICS المخصصة لـ SGS2 أيضًا، على الرغم من أن Samsung "تم حل المشكلة باستخدام اختراق إذن قبيح للغاية":

ما تراه هنا هو سامسونج على الظهر إذن WRITE_MEDIA_STORAGE إلى إذن WRITE_EXTERNAL_STORAGE، لذلك لا تواجه التطبيقات المشكلة الموضحة.

يبقى أن نرى ما إذا كانت Google تنوي أن تقتصر بطاقات SD ووحدات USB المتصلة على القراءة فقط لتطبيقات الطرف الثالث أم لا. ومع ذلك، فإنه يولد فكرة مزعجة: ماذا لو كان الكود والملاحظات المصاحبة له هي الأولى من نوعها في Google مراحل تنفيذ نوع ما من الحماية ضد الكتابة للتخزين الخارجي، وبالتالي تقييد هواتفنا المحمولة بشكل أكبر حرية؟ لا يسعنا إلا أن نأمل أن يكون هذا خطأً حقيقيًا، لأن الحرية هي أحد الأسباب التي تجعلنا نتجنبها جميعًا الجانب المظلم.

[شكرًا جزيلًا لـ Chainfire على التنبيه والمساعدة!]