Lorsqu'une application est installée par un magasin ou un installateur, le magasin ou l'installateur est considéré comme « l'installateur officiel », c'est-à-dire le dernier installateur de l'application. Avant Android 14, Android permettait à un autre magasin ou installateur d’application de devenir l’installateur officiel et de mettre à jour l’application sans en informer l’utilisateur.
Sous Android 14, l’installateur 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 de continuer.
Activer les packages pour mettre à jour la propriété
Pour déclarer qu'un magasin ou un installateur possède un package d'application, incluez la balise update-ownership
dans votre 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 mettre à jour la propriété, d'autres magasins ou installateurs 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 packages lors des changements de propriété
Vous pouvez demander à votre magasin ou à votre installateur de retirer un sous-ensemble de packages des modifications apportées par le propriétaire de la mise à jour en fournissant une liste de refus dans l'APK. En incluant un package dans cette liste, aucun magasin ou installateur ne peut demander la propriété de la mise à jour du package.
Pour empêcher les packages de pouvoir être mis à jour par un autre magasin ou installateur :
Incluez la propriété suivante dans le magasin d'origine ou dans le fichier
AndroidManifest.xml
du programme d'installation :<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 refus XML appelée
legacyOwnershipDenylist
.Créez une liste de refus 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 la propriété d'un package sur une liste noire, la propriété ne sera pas accordée et le package est toujours installé mais n'appartient à aucun installateur. De plus, quel que soit le programme d’installation, une application figurant sur une liste refusée ne peut appartenir à personne.
L’ensemble des packages de cette liste peut changer via une mise à jour du programme d’installation APK qui fournit la liste. Toute propriété définie pour un package qui est ensuite introduit dans une liste de refus est effacée lors de la mise à jour du programme d'installation. En tant que telle, les mises à jour ultérieures du package d’application sur la liste de refus ne nécessiteront pas d’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 installateur de magasin ou 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 appartiennent à un autre magasin ou installateur.
L'exemple d'application InstallAPKSessionApi.java
montre également comment gérer STATUS_PENDING_USER_ACTION
.
Établir la propriété des applications préchargées
Les applications préchargées n'appartiennent généralement pas à un installateur spécifique. Au lieu de cela, les applications préchargées se voient attribuer un nouveau propriétaire à l'aide de la configuration du système, comme indiqué dans Opter pour mettre à jour la propriété .