Configurer et gérer la propriété des mises à jour pour les applications

Lorsqu'une application est installée par une plate-forme de téléchargement ou un programme d'installation, la plate-forme de téléchargement ou le programme d'installation est considéré comme l'installateur enregistré, c'est-à-dire le dernier installateur de l'application. Avant Android 14, Android permettait à une autre plate-forme de téléchargement ou à un autre programme d'installation d'application de devenir l'installateur enregistré et de mettre à jour l'application sans en avertir l'utilisateur.

Sous Android 14, le programme d'installation initial d'une application peut se déclarer "propriétaire de la mise à jour" et posséder les mises à jour de l'application. Si un autre programme d'installation tente de mettre à jour l'application, l'utilisateur a la possibilité d'approuver la nouvelle mise à jour avant qu'elle ne soit effectuée.

Activer les packages pour modifier la propriété

Pour déclarer qu'une plate-forme de téléchargement ou un programme d'installation est propriétaire d'un package d'application, incluez la balise update-ownership dans votre fichier XML sysconfig pour chaque package comme suit:

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

Dans cet exemple, com.example.application est le package d'application à posséder et com.example.installer est le propriétaire du package. Lorsqu'un package est activé pour la propriété de la mise à jour, d'autres plates-formes de téléchargement ou programmes d'installation privilégiés doivent gérer le propriétaire de la mise à jour et obtenir le consentement de l'utilisateur pour mettre à jour l'application.

Désactiver les modifications de propriété pour les packages

Vous pouvez demander à votre plate-forme de téléchargement ou à votre programme d'installation d'exclure un sous-ensemble de packages des modifications de propriétaire de mise à jour en fournissant une liste de blocage dans l'APK. En incluant un package dans cette liste, aucun magasin ni aucun programme d'installation ne peut demander la propriété d'une mise à jour pour le package.

Pour empêcher la mise à jour de packages par un autre magasin ou un autre programme d'installation:

  1. Incluez la propriété suivante dans le fichier AndroidManifest.xml du magasin ou de l'installateur d'origine:

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

    Cet exemple fait référence à une liste de blocage XML appelée legacyOwnershipDenylist.

  2. Créez une liste de blocage en tant que ressource XML brute au format suivant:

    <deny-ownership>com.example.app1</deny-ownership>
    <deny-ownership>com.example.app2</deny-ownership>
    

Si un magasin ou un installateur demande à devenir propriétaire d'un package figurant sur une liste de blocage, la propriété ne sera pas accordée et le package sera toujours installé, mais n'appartenir à aucun programme d'installation. De plus, quelle que soit l'application installée, une application figurant sur une liste de refus ne peut être détenue par personne.

L'ensemble des packages de cette liste peut changer via une mise à jour de l'APK d'installation qui fournit la liste. Toute propriété définie pour un package qui est ensuite ajouté à une liste de blocage est effacée lors de la mise à jour du programme d'installation. Par conséquent, les mises à jour ultérieures du package d'application figurant sur la liste de refus ne nécessiteront aucune interaction de l'utilisateur.

Gérer le propriétaire de la mise à jour et obtenir le consentement de l'utilisateur

Avec Android 14, même si un magasin ou un programme d'installation d'application dispose de l'autorisation android.permission.INSTALL_PACKAGES, il doit toujours gérer l'état STATUS_PENDING_USER_ACTION s'il souhaite mettre à jour une application dont les mises à jour sont détenues par un autre magasin ou un autre programme d'installation.

L'application exemple InstallAPKSessionApi.java montre également comment gérer STATUS_PENDING_USER_ACTION.

Définir la propriété des applications préchargées

Les applications préchargées ne sont généralement pas la propriété d'un programme d'installation spécifique. À la place, un nouveau propriétaire est attribué aux applications préchargées à l'aide de la configuration système, comme indiqué dans la section Activer les packages pour mettre à jour la propriété.