Eigentum für Updates von Apps konfigurieren und verwalten

Wenn eine App von einem Store oder Installer installiert wird, gilt der Store oder Installer als „Installer of Record“, d. h. als letzter Installer der App. Vor Android 14 konnte ein anderer Store oder App-Installer zum „Installer of Record“ werden und die App aktualisieren, ohne den Nutzer zu benachrichtigen.

In Android 14 kann sich der ursprüngliche Installer einer App als „Update-Inhaber“ deklarieren und Updates für die App besitzen. Wenn ein anderer Installer versucht, die App zu aktualisieren, hat der Nutzer die Möglichkeit, das neue Update zu genehmigen, bevor es fortgesetzt wird.

Pakete aktivieren, um die Inhaberschaft zu aktualisieren

Wenn Sie deklarieren möchten, dass ein Store oder Installer ein App-Paket besitzt, fügen Sie das update-ownership-Tag in Ihr sysconfig-XML für jedes Paket ein, wie unten beschrieben:

<update-ownership package="com.example.application" installer="com.example.installer" />

In diesem Beispiel ist com.example.application das App-Paket, das im Besitz von com.example.installer ist. Wenn ein Paket für die Aktualisierung der Inhaberschaft aktiviert ist, müssen andere Stores oder Installationsprogramme mit Berechtigungen die Aktualisierung der Inhaberschaft verarbeiten und die Einwilligung des Nutzers einholen, um die App zu aktualisieren.

Pakete von Inhaberänderungen ausschließen

Sie können festlegen, dass für eine Teilmenge von Paketen keine Änderungen des Eigentümers von Updates erfolgen, indem Sie eine Sperrliste im APK angeben. Wenn Sie ein Paket in diese Liste aufnehmen, kann kein Store oder Installer die Inhaberschaft für Updates des Pakets anfordern.

So verhindern Sie, dass Pakete von einem anderen Store oder Installer aktualisiert werden können:

  1. Fügen Sie die folgende Eigenschaft in die Datei AndroidManifest.xml des ursprünglichen Stores oder Installationsprogramms ein:

    <application …>
      <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST"
                android:resource="@xml/legacyOwnershipDenylist" />
    </application>
    

    In diesem Beispiel wird auf eine XML-Sperrliste mit dem Namen legacyOwnershipDenylist verwiesen.

  2. 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 die Inhaberschaft für ein Paket auf einer Sperrliste anfordert, wird die Inhaberschaft nicht gewährt. Das Paket ist weiterhin installiert, gehört aber keinem Installer. Unabhängig vom Installationsprogramm kann eine App auf einer Sperrliste niemandem gehören.

Die Liste der Pakete kann sich durch ein Update des Installer-APKs ändern, das die Liste bereitstellt. Alle Inhaberschaften, die für ein Paket festgelegt sind, das später in eine Sperrliste aufgenommen wird, werden gelöscht, wenn das Installationsprogramm aktualisiert wird. Daher sind für nachfolgende Updates des App-Pakets auf der Ablehnungsliste keine Nutzerinteraktionen erforderlich.

Inhaber aktualisieren und Nutzereinwilligung einholen

Auch wenn ein App-Shop oder App-Installer unter Android 14 die Berechtigung android.permission.INSTALL_PACKAGES hat, muss er den Status STATUS_PENDING_USER_ACTION verarbeiten, wenn er eine App aktualisieren möchte, deren Updates einem anderen App-Shop oder Installer gehören.

In der InstallAPKSessionApi.java-Beispiel-App wird auch gezeigt, wie STATUS_PENDING_USER_ACTION behandelt wird.

Eigentümerschaft für vorinstallierte Apps festlegen

Vorinstallierte Apps gehören in der Regel nicht zu einem bestimmten Installationsprogramm. Stattdessen wird vorinstallierten Apps ein neuer Inhaber zugewiesen, indem die Systemkonfiguration verwendet wird, wie unter Pakete für die Aktualisierung des Inhabers aktivieren beschrieben.