רשימת היתרים של UID משותף בחתימה של הפלטפורמה

אפליקציות עם חתימת פלטפורמה הן אפליקציות שמשתפות את אותה חתימה (או תואמת) עם חבילת הפלטפורמה (android). אפליקציה עם חתימה בפלטפורמה יכולה להיות אפליקציית מערכת (שנמצאת במחיצה של תמונות מערכת) או אפליקציה שאינה של המערכת. מזהי UID משותפים בחתימה של פלטפורמה הם מזהי UID משותפים (android:sharedUserId) מכילים אפליקציות עם חתימת פלטפורמה. גרסאות build שניתנות לניפוי באגים הן גרסאות build android.os.Build.isDebuggable() מחזירה true, למשל userdebug או eng לבנות.

בעבר, ליצרני המכשירים הייתה מעט שליטה בבחירת הפלטפורמה שחתומה אפליקציות שאינן מערכת יוכלו להצטרף ל-UID משותף בחתימה של הפלטפורמה. הפעלה ב-Android 15, יצרנים יכולים לאפשר חתימה על פלטפורמה באופן מפורש אפליקציות שהן לא מערכת כדי להצטרף למזהי UID משותפים בחתימה של פלטפורמה בהגדרות המערכת קובצי XML בספרייה /etc/permissions. אם מדובר במערכת שלא חתומה על ידי פלטפורמה האפליקציה לא מתווספת לרשימת ההיתרים של UID משותף בחתימה של הפלטפורמה, והאפליקציה עדיין ינסה להצטרף ל-UID המשותף שחתום על ידי הפלטפורמה (עם android:sharedUserId) במניפסט שלו), לא ניתן להתקין את האפליקציה הזו בגרסאות build שלא ניתנות לניפוי באגים.

הוספה של רשימת היתרים

אפשר להציג רשימות היתרים של אפליקציות בקובץ XML יחיד או בכמה קובצי XML, דומה ל- frameworks/base/data/etc/package-shareduid-allowlist.xml:

<!--
This XML defines an allowlist for packages that want to join a particular shared-uid.
If a non-system package that is signed with platform signature, is trying to join a particular
shared-uid, and not in this list, the installation will fail.

- The "package" XML attribute refers to the app's package name.
- The "shareduid" XML attribute refers to the shared uid name.
  -->

<config>
    <allow-package-shareduid package="android.test.settings" shareduid="android.uid.system" />
</config>

איתור רשימת היתרים חסרה

כדי למצוא רשומה חסרה ברשימת ההיתרים, אפשר לנסות להתקין את הפלטפורמה שלא חתומה על ידי הפלטפורמה ב-build שלא ניתן לניפוי באגים ובודקים אם אפשר להתקין אותו. אם לא, יכול לבדוק את יומני המכשיר כדי לאתר הודעות אזהרה בפורמט הבא:

Non-preload app {PACKAGE_NAME} signed with platform signature and joining shared uid: {SHARED_UID_NAME}