當應用程式由商店或安裝程式安裝時,商店或安裝程式被視為“記錄安裝程式”,即應用程式的最後一個安裝程式。在 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
。
建立預先安裝應用程式的所有權
預先載入的應用程式通常不屬於特定安裝程式。相反,預先載入的應用程式會使用系統組態指派新的擁有者,如選擇套件更新所有權所示。