當應用程式由商店或安裝程式安裝時,商店或安裝程式會視為「正式安裝程式」,也就是應用程式的最後安裝程式。在 Android 14 之前,Android 允許其他商店或應用程式安裝程式成為正式安裝程式,並在未通知使用者的情況下更新應用程式。
在 Android 14 中,應用程式的初始安裝程式可宣告自身為「更新擁有者」,並擁有應用程式的更新。如果其他安裝程式嘗試更新應用程式,使用者將有機會在繼續前核准新的更新。
選擇套件來更新擁有權
如要宣告商店或安裝程式擁有應用程式套件,請在每個套件的 sysconfig
XML 中加入 update-ownership
標記,如下所示:
<update-ownership package="com.example.application" installer="com.example.installer" />
在此範例中,com.example.application
是要擁有的應用程式套件,而 com.example.installer
是套件的擁有者。當套件選擇更新擁有權時,其他特權商店或安裝程式必須處理更新擁有者並取得使用者同意聲明,才能更新應用程式。
選擇不讓套件參與擁有權異動
只要在 APK 中提供拒絕清單,即可讓商店或安裝程式選擇不要對更新擁有者做出變更的部分套件。將套件納入此清單後,任何商店或安裝程式都無法要求更新套件的擁有權。
如要讓套件無法透過其他商店或安裝程式更新,請按照下列步驟操作:
在原始商店或安裝程式的
AndroidManifest.xml
檔案中加入下列屬性:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
這個範例參照名為
legacyOwnershipDenylist
的 XML 拒絕清單。請使用下列格式建立拒絕清單做為原始 XML 資源:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
如果商店或安裝程式要求拒絕清單上的套件擁有權,系統不會授予擁有權,套件仍會安裝,但不會由任何安裝程式擁有。此外,無論安裝程式為何,遭到拒絕清單拒絕的應用程式都無法由任何人擁有。
這個清單中的套件組合可以透過提供清單的安裝程式 APK 更新而變更。安裝程式更新後,系統會清除針對套件所設的所有擁有權,這些套件會在之後加入拒絕清單。因此,拒絕清單上的應用程式套件之後的更新作業不需要使用者互動。
處理更新擁有者並取得使用者同意聲明
在 Android 14 中,即使商店或應用程式安裝程式擁有 android.permission.INSTALL_PACKAGES
權限,如果想更新由其他商店或安裝程式擁有更新權限的應用程式,仍需處理 STATUS_PENDING_USER_ACTION
狀態。
InstallAPKSessionApi.java
範例應用程式也會顯示如何處理 STATUS_PENDING_USER_ACTION
。
為預先載入的應用程式取得擁有權
預先載入的應用程式通常不屬於特定安裝程式。相反地,系統會使用系統設定為預先載入的應用程式指派新擁有者,如「Opt packages in to update ownership」所示。