Wenn eine App von einem Store oder Installateur installiert wird, gilt der Store oder Installer als „Installer of Record“, d. h. als letzter Installer der App. Vor Android 14 erlaubte Android einem anderen Store oder App-Installer, der eingetragene Installer zu werden und die App zu aktualisieren, ohne den Benutzer zu benachrichtigen.
In Android 14 kann sich der Erstinstaller einer App selbst zum „Update-Besitzer“ erklären und Updates für die App besitzen. Wenn ein anderer Installer versucht, die App zu aktualisieren, erhält der Benutzer die Möglichkeit, das neue Update zu genehmigen, bevor es fortfährt.
Aktivieren Sie Pakete, um den Besitz zu aktualisieren
Um zu deklarieren, dass ein Store oder Installer ein App-Paket besitzt, fügen Sie das Tag update-ownership
wie folgt in Ihre sysconfig
XML ein:
<update-ownership package="com.example.application" installer="com.example.installer" />
In diesem Beispiel ist com.example.application
das App-Paket, dessen Besitzer sein soll, und com.example.installer
ist der Besitzer des Pakets. Wenn für ein Paket der Update-Besitz aktiviert ist, müssen andere privilegierte Stores oder Installer den Update-Eigentümer verwalten und die Zustimmung des Benutzers zum Aktualisieren der App einholen .
Deaktivieren Sie Pakete von Eigentümerwechseln
Sie können Ihren Shop oder Ihr Installationsprogramm veranlassen, eine Teilmenge der Pakete von Änderungen des Update-Eigentümers auszuschließen, indem Sie im APK eine Sperrliste bereitstellen. Durch die Aufnahme eines Pakets in diese Liste kann kein Store oder Installer den Update-Eigentümer des Pakets anfordern.
So deaktivieren Sie die Aktualisierbarkeit von Paketen durch einen anderen Store oder Installer:
Fügen Sie die folgende Eigenschaft in die
AndroidManifest.xml
Datei des ursprünglichen Stores oder Installationsprogramms ein:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
Dieses Beispiel verweist auf eine XML-Denylist mit dem Namen
legacyOwnershipDenylist
.Erstellen Sie eine Sperrliste als Roh-XML-Ressource mit dem folgenden Format:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
Wenn ein Store oder Installer den Besitz eines Pakets auf einer Sperrliste anfordert, wird der Besitz nicht gewährt und das Paket wird weiterhin installiert, gehört aber keinem Installer. Darüber hinaus kann eine App auf einer Sperrliste unabhängig vom Installationsprogramm niemandem gehören.
Der Paketsatz in dieser Liste kann sich durch ein Update des Installations-APK ändern, das die Liste bereitstellt. Jeder Besitz, der für ein Paket festgelegt ist, das anschließend in eine Verweigerungsliste aufgenommen wird, wird gelöscht, wenn das Installationsprogramm aktualisiert wird. Daher erfordern nachfolgende Aktualisierungen des App-Pakets auf der Ablehnungsliste keine Benutzerinteraktion.
Behandeln Sie den Update-Eigentümer und holen Sie die Zustimmung des Benutzers ein
Selbst wenn ein Store oder App-Installer mit Android 14 über die Berechtigung android.permission.INSTALL_PACKAGES
verfügt, muss er dennoch den Status STATUS_PENDING_USER_ACTION
verarbeiten, wenn er eine App aktualisieren möchte, deren Updates einem anderen Store oder Installer gehören.
Die Beispiel-App InstallAPKSessionApi.java
zeigt auch, wie STATUS_PENDING_USER_ACTION
umgegangen wird.
Richten Sie den Besitz für vorinstallierte Apps ein
Vorinstallierte Apps gehören normalerweise nicht einem bestimmten Installationsprogramm. Stattdessen wird vorinstallierten Apps mithilfe der Systemkonfiguration ein neuer Besitzer zugewiesen, wie unter „Pakete zur Aktualisierung des Besitzes aktivieren“ gezeigt.