Quando um aplicativo é instalado por uma loja ou instalador, a loja ou instalador é considerado o "instalador registrado", ou seja, o último instalador do aplicativo. Antes do Android 14, o Android permitia que outra loja ou instalador de aplicativo se tornasse o instalador registrado e atualizasse o aplicativo sem notificar o usuário.
No Android 14, o instalador inicial de um aplicativo pode se declarar “proprietário da atualização” e possuir atualizações do aplicativo. Se outro instalador tentar atualizar o aplicativo, o usuário terá a oportunidade de aprovar a nova atualização antes de prosseguir.
Ative pacotes para atualizar a propriedade
Para declarar que uma loja ou instalador possui um pacote de aplicativo, inclua a tag update-ownership
no XML do sysconfig
para cada pacote da seguinte maneira:
<update-ownership package="com.example.application" installer="com.example.installer" />
Neste exemplo, com.example.application
é o pacote de aplicativo de propriedade e com.example.installer
é o proprietário do pacote. Quando um pacote é ativado para atualizar a propriedade, outras lojas ou instaladores privilegiados precisam lidar com o proprietário da atualização e obter o consentimento do usuário para atualizar o aplicativo.
Desativar pacotes de alterações de propriedade
Você pode fazer com que sua loja ou instalador opte por excluir um subconjunto de pacotes das alterações do proprietário da atualização, fornecendo uma lista de bloqueios no APK. Ao incluir um pacote nesta lista, nenhuma loja ou instalador pode solicitar a propriedade de atualização do pacote.
Para impedir que os pacotes sejam atualizáveis por outra loja ou instalador:
Inclua a seguinte propriedade no armazenamento original ou no arquivo
AndroidManifest.xml
do instalador:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
Este exemplo faz referência a uma lista de bloqueios XML chamada
legacyOwnershipDenylist
.Crie uma lista de bloqueios como recurso XML bruto com o seguinte formato:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
Se uma loja ou instalador solicitar a propriedade de um pacote em uma lista de bloqueio, a propriedade não será concedida e o pacote ainda estará instalado, mas não pertencerá a nenhum instalador. Além disso, independentemente do instalador, um aplicativo em uma lista de bloqueio não pode pertencer a ninguém.
O conjunto de pacotes nesta lista pode ser alterado por meio de uma atualização do APK do instalador que fornece a lista. Qualquer propriedade definida para um pacote que é subsequentemente introduzido em uma lista de negações é limpa quando o instalador é atualizado. Como tal, as atualizações subsequentes do pacote de aplicações na lista de negações não exigirão a interação do utilizador.
Lidar com o proprietário da atualização e obter o consentimento do usuário
Com o Android 14, mesmo que uma loja ou instalador de aplicativo tenha a permissão android.permission.INSTALL_PACKAGES
, ele ainda precisará lidar com o estado STATUS_PENDING_USER_ACTION
se quiser atualizar um aplicativo cujas atualizações pertencem a outra loja ou instalador.
O aplicativo de amostra InstallAPKSessionApi.java
também mostra como lidar com STATUS_PENDING_USER_ACTION
.
Estabeleça a propriedade de aplicativos pré-carregados
Os aplicativos pré-carregados normalmente não pertencem a um instalador específico. Em vez disso, os aplicativos pré-carregados recebem um novo proprietário usando a configuração do sistema, conforme mostrado em Optar por pacotes para atualizar a propriedade .