التطبيقات الموقَّعة من خلال النظام الأساسي هي تطبيقات تشارك شهادة التوقيع نفسها (أو شهادة متوافقة) مع حزمة النظام الأساسي (android
). يمكن أن يكون التطبيق الموقَّع من خلال النظام الأساسي تطبيقًا تابعًا للنظام (يقع في قسم صورة النظام) أو تطبيقًا غير تابع للنظام. أذونات التوقيع من خلال النظام الأساسي هي أذونات تحدّدها حزمة النظام الأساسي وتتضمّن أيضًا مستوى الحماية signature
. الإصدارات التي يمكن تصحيح أخطائها هي إصدارات تعرض الدالة android.os.Build.isDebuggable()
القيمة true
، مثل إصدارات userdebug
أو eng
.
في السابق، لم يكن لدى مصنّعي الأجهزة سوى القليل من التحكّم في أذونات signature
المنصة التي يمكن منحها للتطبيقات غير التابعة للنظام والموقّعة من المنصة.
بدءًا من الإصدار 15 من نظام التشغيل Android، يمكن للمصنّعين منح أذونات توقيع النظام الأساسي بشكل صريح في ملفات XML الخاصة بإعدادات النظام في الدليل /etc/permissions
. إذا لم تتم إضافة تطبيق موقَّع على النظام الأساسي وغير تابع له إلى القائمة المسموح بها لإذن التوقيع على النظام الأساسي، سيعمل هذا الإذن كما لو أنّ التطبيق غير موقَّع على النظام الأساسي في الإصدارات غير القابلة للتصحيح.
إضافة قائمة مسموح بها
يمكنك إدراج قوائم السماح بالأذونات للتطبيقات في ملف XML واحد أو في ملفات XML متعددة موجودة في الدليل /etc/permissions
:
/etc/permissions/signature-permissions-OEM_NAME.xml
/etc/permissions/signature-permissions-DEVICE_NAME.xml
لا توجد قاعدة صارمة بشأن طريقة تنظيم المحتوى. يمكن لمصنّعي الأجهزة تحديد بنية المحتوى طالما تمت إضافة التطبيقات المناسبة وأذوناتها إلى القائمة المسموح بها.
تخصيص قائمة مسموح بها
يتضمّن مشروع AOSP تنفيذًا لقائمة مسموح بها يمكنك تخصيصه حسب الحاجة، على غرار قائمة الأذونات المميزة المسموح بها. على سبيل المثال:
<!--
~ This XML file declares which platform signature permissions to grant to
~ platform signed nonsystem apps.
-->
<permissions>
<signature-permissions package="com.android.example">
<permission name="android.permission.READ_DEVICE_CONFIG"/>
...
</signature-permissions>
...
</permissions>
العثور على الأذونات الناقصة
للعثور على الأذونات الناقصة، ثبِّت تطبيقك الموقَّع على المنصة وافحص سجلات الجهاز بحثًا عن تنسيق رسائل التحذير التالية:
Signature permission {PERMISSION_NAME} for package {PACKAGE_NAME} ({PACKAGE_PATH}) not in signature permission allowlist
سيظل بإمكان النظام منح الإذن في الإصدارات التي يمكن تصحيح أخطائها، ولكن ليس في الإصدارات التي لا يمكن تصحيح أخطائها، مثل إصدارات user
.