برنامههای امضا شده توسط پلتفرم، برنامههایی هستند که گواهی امضای یکسان (یا سازگار) را با بسته پلتفرم ( android ) به اشتراک میگذارند. یک برنامه امضا شده توسط پلتفرم میتواند یک برنامه سیستمی (واقع در یک پارتیشن تصویر سیستم) یا یک برنامه غیرسیستمی باشد. مجوزهای امضای پلتفرم، مجوزهایی هستند که توسط بسته پلتفرم تعریف میشوند و دارای سطح حفاظت signature نیز میباشند. نسخههای قابل اشکالزدایی، نسخههایی هستند که android.os.Build.isDebuggable() آنها true را برمیگرداند، مانند نسخههای userdebug یا eng .
از نظر تاریخی، تولیدکنندگان دستگاه کنترل کمی بر مجوزهای signature پلتفرم که میتوانست به برنامههای غیرسیستمی امضا شده با پلتفرم اعطا شود، داشتند. با شروع از اندروید ۱۵، تولیدکنندگان میتوانند به صراحت مجوزهای امضای پلتفرم را در فایلهای 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 این اجازه را نمیدهد.