Cuando una tienda o un instalador instala una aplicación, la tienda o el instalador se considera el "instalador registrado", es decir, el último instalador de la aplicación. Antes de Android 14, Android permitía que otra tienda o instalador de aplicaciones se convirtiera en el instalador registrado y actualizara la aplicación sin notificar al usuario.
En Android 14, el instalador inicial de una aplicación puede declararse "propietario de la actualización" y poseer las actualizaciones de la aplicación. Si otro instalador intenta actualizar la aplicación, el usuario tiene la oportunidad de aprobar la nueva actualización antes de continuar.
Optar paquetes para actualizar la propiedad
Para declarar que una tienda o un instalador posee un paquete de aplicación, incluya la etiqueta update-ownership
en su XML sysconfig
para cada paquete de la siguiente manera:
<update-ownership package="com.example.application" installer="com.example.installer" />
En este ejemplo, com.example.application
es el paquete de la aplicación que se posee y com.example.installer
es el propietario del paquete. Cuando se opta por actualizar la propiedad de un paquete, otras tiendas o instaladores privilegiados deben manejar la actualización del propietario y obtener el consentimiento del usuario para actualizar la aplicación.
Optar paquetes fuera de los cambios de propiedad
Puede hacer que su tienda o instalador opte por excluir un subconjunto de paquetes de los cambios de propietario de la actualización proporcionando una lista de denegación en el APK. Al incluir un paquete en esta lista, ninguna tienda o instalador puede solicitar la actualización de la propiedad del paquete.
Para optar por que los paquetes no sean actualizables por otra tienda o instalador:
Incluya la siguiente propiedad en la tienda original o en el archivo
AndroidManifest.xml
del instalador:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
Este ejemplo hace referencia a una lista de denegación XML denominada
legacyOwnershipDenylist
.Cree una lista de denegados como recurso XML sin formato con el siguiente formato:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
Si una tienda o un instalador solicita la propiedad de un paquete en una lista de denegación, no se concederá la propiedad y el paquete seguirá instalado, pero no será propiedad de ningún instalador. Además, independientemente del instalador, una aplicación en una lista de denegación no puede ser propiedad de nadie.
El conjunto de paquetes en esta lista puede cambiar mediante una actualización del APK del instalador que proporciona la lista. Cualquier propiedad establecida para un paquete que posteriormente se introduce en una lista de denegación se borra cuando se actualiza el instalador. Como tal, las actualizaciones posteriores del paquete de la aplicación en la lista de denegación no requerirán la interacción del usuario.
Manejar al propietario de la actualización y obtener el consentimiento del usuario
Con Android 14, incluso si una tienda o instalador de aplicaciones tiene el permiso android.permission.INSTALL_PACKAGES
, aún necesita manejar el estado STATUS_PENDING_USER_ACTION
si quiere actualizar una aplicación cuyas actualizaciones pertenecen a otra tienda o instalador.
La aplicación de muestra InstallAPKSessionApi.java
también muestra cómo manejar STATUS_PENDING_USER_ACTION
.
Establecer propiedad para aplicaciones precargadas
Las aplicaciones precargadas normalmente no pertenecen a un instalador específico. En su lugar, a las aplicaciones precargadas se les asigna un nuevo propietario mediante la configuración del sistema, como se muestra en Optar paquetes para actualizar la propiedad .