אפליקציות בחתימה של פלטפורמה הן אפליקציות שחולקות את אותו אישור חתימה (או אישור תואם) עם חבילת הפלטפורמה (android
). אפליקציה בחתימה של פלטפורמה יכולה להיות אפליקציית מערכת (שנמצאת במחיצה של קובץ האימג' של המערכת) או אפליקציה שאינה אפליקציית מערכת. מזהי UID משותפים בחתימה של פלטפורמה הם מזהי UID משותפים (android:sharedUserId
) שמכילים אפליקציות בחתימה של פלטפורמה. גרסאות build שניתן לנפות באגים הן גרסאות build שהערך המוחזר של android.os.Build.isDebuggable()
הוא true
, כמו גרסאות build מסוג 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}