כשמתקינים אפליקציה דרך חנות או כלי התקנה, החנות או כלי ההתקנה נחשבים ל'מתקין הרשמי', כלומר המתקין האחרון של האפליקציה. לפני Android 14, מערכת Android אפשרה לחנות אחרת או לכלי התקנה אחר של אפליקציות להפוך למתקין הרשמי ולעדכן את האפליקציה בלי להודיע למשתמש.
ב-Android 14, תוכנת ההתקנה הראשונית של אפליקציה יכולה להגדיר את עצמה כ'בעלים של העדכון' ולשלוט בעדכונים של האפליקציה. אם תוכנת התקנה אחרת מנסה לעדכן את האפליקציה, המשתמש מקבל אפשרות לאשר את העדכון החדש לפני שהוא מתבצע.
הסכמה לעדכון הבעלות על חבילות
כדי להצהיר שחנות או כלי התקנה הם הבעלים של חבילת אפליקציה, צריך לכלול את התג update-ownership בקובץ ה-XML sysconfig לכל חבילה באופן הבא:
<update-ownership package="com.example.application" installer="com.example.installer" />
בדוגמה הזו, com.example.application הוא חבילת ה-APK שרוצים להגדיר לה בעלות, ו-com.example.installer הוא הבעלים של החבילה. כשחבילה מוגדרת לעדכון הבעלות, חנויות או תוכנות התקנה אחרות עם הרשאות צריכות לטפל בעדכון הבעלות ולקבל את הסכמת המשתמש כדי לעדכן את האפליקציה.
ביטול ההסכמה לשינויים בבעלות על חבילות
אתם יכולים להגדיר בחנות או בכלי ההתקנה שלכם רשימת חבילות שיוחרגו משינויים בבעלות על עדכונים. לשם כך, צריך לספק רשימת חסימה ב-APK. אם כוללים חבילה ברשימה הזו, אף חנות או כלי התקנה לא יכולים לבקש בעלות על עדכון החבילה.
כדי להוציא חבילות מהאפשרות לעדכן אותן דרך חנות אחרת או תוכנת התקנה אחרת:
צריך לכלול את המאפיין הבא בקובץ
AndroidManifest.xmlשל החנות המקורית או של קובץ ההתקנה:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>בדוגמה הזו יש הפניה לרשימת חסימה בפורמט XML שנקראת
legacyOwnershipDenylist.יוצרים רשימת חסימה כמשאב XML גולמי בפורמט הבא:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
אם חנות או קובץ התקנה מבקשים בעלות על חבילה ברשימת דחייה, הבעלות לא תינתן והחבילה עדיין תותקן, אבל לא תהיה בבעלות של אף קובץ התקנה. בנוסף, לא משנה מאיפה מתקינים את האפליקציה, אם היא נמצאת ברשימת האפליקציות האסורות, אף אחד לא יכול להיות הבעלים שלה.
קבוצת החבילות ברשימה הזו יכולה להשתנות באמצעות עדכון של קובץ ה-APK של תוכנת ההתקנה שמספקת את הרשימה. כל הגדרת בעלות שמוגדרת לחבילה שנוספת בהמשך לרשימת דחייה מבוטלת כשהמתקין מתעדכן. לכן, עדכונים עתידיים של חבילת APK ברשימת האפליקציות שנדחו לא ידרשו אינטראקציה מצד המשתמש.
טיפול בעדכון הבעלים וקבלת הסכמה מהמשתמשים
ב-Android 14, גם אם לחנות או למתקין אפליקציות יש הרשאה של android.permission.INSTALL_PACKAGES, הם עדיין צריכים לטפל במצב STATUS_PENDING_USER_ACTION אם הם רוצים לעדכן אפליקציה שהעדכונים שלה הם בבעלות של חנות או מתקין אחרים.
באפליקציית הדוגמה InstallAPKSessionApi.java אפשר לראות איך מטפלים ב-STATUS_PENDING_USER_ACTION.
הגדרת בעלות על אפליקציות שנטענו מראש
בדרך כלל, אפליקציות שנטענו מראש לא שייכות למתקין ספציפי. במקום זאת, לאפליקציות שנטענו מראש מוקצה בעלים חדש באמצעות הגדרת המערכת, כמו שמוסבר במאמר הפעלת עדכון של בעלות על חבילות.