التطبيقات المميزة هي تطبيقات النظام الموجودة في دليل priv-app
الخاص على أحد أقسام صورة النظام. الأقسام المستخدمة لإصدارات Android هي
- Android 8.1 والإصدارات الأقدم -
/system
- Android 9 والإصدارات الأحدث -
/system, /product, /vendor
في جميع أنحاء هذه الصفحة ، /etc/permissions/priv-app
partition /etc/permissions/priv-app
.
تاريخياً ، لم يكن لدى مصنعي الأجهزة سيطرة تذكر على التوقيع | الأذونات المميزة التي يمكن منحها للتطبيقات المميزة. بدءًا من Android 8.0 ، يجب على الشركات المصنعة منح أذونات مميزة بشكل صريح في ملفات XML الخاصة بتكوين النظام في دليل /etc/permissions
. اعتبارًا من Android 9 ، يجب على المنفذين منح أو رفض جميع الأذونات المميزة بشكل صريح وإلا فلن يتم تشغيل الجهاز.
يمكن فقط للملف privapp-permissions.xml
.xml منح أو رفض الأذونات للتطبيقات المميزة على نفس القسم. على سبيل المثال ، إذا طلب أحد التطبيقات الموجودة في قسم /product
أذونات مميزة ، فلا يمكن منح الطلب أو رفضه إلا من خلال ملف privapp-permissions.xml
أيضًا على /product
.
إضافة السماح
يمكن إدراج قوائم السماح بالتطبيقات في ملف XML واحد أو في ملفات XML متعددة موجودة في دليل frameworks/base/etc/permissions
على النحو التالي:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
لا توجد قاعدة صارمة لتنظيم المحتوى. يمكن لمنفذي الأجهزة تحديد بنية المحتوى طالما أن جميع التطبيقات من /system/priv-app
مدرجة في القائمة. على سبيل المثال ، لدى Google قائمة سماح واحدة لجميع التطبيقات المميزة التي طورتها Google ، وتوصي بالمؤسسة التالية:
- أذونات التطبيقات المضمنة بالفعل في شجرة مشروع Android مفتوح المصدر (AOSP) مدرجة في
/etc/permissions/privapp-permissions-platform.xml
. - أذونات تطبيقات Google مدرجة في
/etc/permissions/privapp-permissions-google.xml
. - بالنسبة إلى التطبيقات الأخرى ، استخدم ملفات من النموذج:
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
تخصيص اللوائح
يتضمن AOSP تنفيذ قائمة السماح التي يمكن تخصيصها حسب الحاجة. أذونات التطبيقات المضمنة في AOSP مسموح بها بالفعل في /etc/permissions/privapp-permissions-platform.xml
.
إذا كانت هناك أذونات يجب رفضها ، فقم بتحرير XML لاستخدام علامة "رفض الإذن" بدلاً من علامة "إذن". مثال:
<!-- This XML file declares which signature|privileged permissions to grant to privileged apps that come with the platform --> <permissions> <privapp-permissions package="com.android.backupconfirm"> <permission name="android.permission.BACKUP"/> <permission name="android.permission.CRYPT_KEEPER"/> </privapp-permissions> <privapp-permissions package="com.android.cellbroadcastreceiver"> <!-- Don't allow the application to interact across users --> <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/> <permission name="android.permission.MANAGE_USERS"/> <permission name="android.permission.MODIFY_PHONE_STATE"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/> </privapp-permissions> ...
البحث عن الأذونات المفقودة
للعثور على الأذونات المفقودة عند إحضار جهاز جديد ، قم بتمكين وضع السجل الانتقالي:
ro.control_privapp_permissions=log
يتم الإبلاغ عن الانتهاكات في ملف السجل ، ولكن لا يزال يتم منح الأذونات غير المميزة. هذا يبقي الجهاز في حالة عمل مع توفير قائمة الانتهاكات. هذا هو تنسيق رسالة الخطأ:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
يجب معالجة جميع الانتهاكات عن طريق إضافة الأذونات المفقودة إلى قوائم السماح المناسبة.
- في Android 8.0 والإصدارات الأقدم ، لا تُمنح التطبيقات المتأثرة الأذونات المفقودة حتى لو كانت في مسار
priv-app
. - في نظام Android 9 والإصدارات الأحدث ، تعني الانتهاكات (للأذونات المميزة ) أن الجهاز لا يقوم بالتمهيد . يجب عليك إما السماح صراحةً أو رفض جميع الأذونات المميزة
فرض السماح
بعد أن تكون قوائم السماح في مكانها الصحيح ، قم بتمكين فرض وقت التشغيل عن طريق تعيين خاصية البناء ro.control_privapp_permissions=enforce
.