Cuando un instalador o una tienda instala una app, se los considera como el "instalador de registros", lo que significa que son el último ente que instaló la app. En las versiones anteriores a Android 14, el sistema operativo permitía que otro instalador de apps o tienda sea el instalador de registros y que actualizara la app sin notificar al usuario.
En Android 14, el instalador inicial de una app puede declararse "propietario de la actualización" y brindar actualizaciones a la app. Si otro instalador intenta actualizar la app, el usuario tiene la posibilidad de aprobar la actualización antes de continuar.
Cómo habilitar las actualizaciones de propiedad de paquetes
Para declarar una tienda o un instalador como propietario de un paquete de aplicaciones, incluye la etiqueta update-ownership
en tu sysconfig
XML de cada paquete, como se muestra a continuación:
<update-ownership package="com.example.application" installer="com.example.installer" />
En este ejemplo, com.example.application
representa el paquete de la app y com.example.installer
es el propietario de dicho paquete. Cuando se habilita un paquete para actualizar su propiedad, otros instaladores y tiendas con privilegios deben encargarse del propietario de la actualización y obtener el consentimiento del usuario para actualizar la app.
Cómo inhabilitar los cambios de propiedad de paquetes
Puedes brindar una lista de bloqueo en el APK para hacer que el instalador o la tienda rechacen un subconjunto de paquetes del propietario de la actualización. Si incluyes un paquete en esta lista, ningún instalador o tienda podrá solicitar la propiedad de las actualizaciones del paquete.
Para inhabilitar los paquetes y que ningún instalador o tienda pueda actualizarlos, haz lo siguiente:
Incluye la siguiente propiedad en el instalador o la tienda original del archivo
AndroidManifest.xml
:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
Este ejemplo hace referencia a una lista de bloqueo XML denominada
legacyOwnershipDenylist
.Crea una lista de bloqueo como un recurso XML sin procesar con el siguiente formato:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
Si un instalador o una tienda solicitan la propiedad de un paquete en la lista de bloqueo, no se otorgará la propiedad y se dejará instalado el paquete, pero no será propiedad de ningún instalador. Además, sin importar el instalador, una app en una lista de bloqueo no puede ser propiedad de ninguna entidad.
El conjunto de paquetes en esta lista puede cambiar con una actualización en el instalador de APK que brinda la lista. Cualquier propiedad que se establezca en un paquete que luego se introduzca en una lista de bloqueo se elimina cuando se actualiza el instalador. Como consecuencia, las siguientes actualizaciones del paquete de la app en una lista de bloqueo no solicitará la interacción del usuario.
Cómo controlar las actualizaciones de propietarios y obtener el consentimiento del usuario
Con Android 14, incluso si una tienda o un instalador de apps tiene el permiso android.permission.INSTALL_PACKAGES
, deberá controlar el estado STATUS_PENDING_USER_ACTION
si quiere actualizar una app cuyas actualizaciones son de otro instalador o tienda.
La app de ejemplo InstallAPKSessionApi.java
también muestra cómo controlar STATUS_PENDING_USER_ACTION
.
Cómo establecer la propiedad en apps precargadas
Por lo general, las apps precargadas no son propiedad de un instalador específico. En cambio, se les asigna uno nuevo con un sistema de configuración como se muestra en Cómo habilitar las actualizaciones de propiedad de paquetes.