Quando um app é instalado por uma loja ou um instalador, ela ou ele podem ser considerados instaladores do registro, representando o último instalador do app. Antes do Android 14, outra loja ou instalador podia se tornar esse instalador e atualizar o app sem notificar o usuário.
No Android 14, o instalador inicial de um app pode se declarar proprietário das atualizações do app. Se outro instalador tenta atualizar o app, o usuário tem a possibilidade de aprovar a nova atualização antes de continuar.
Ativar a atualização de propriedade em pacotes
Para declarar que uma loja ou instalador é o proprietário de um pacote de apps,
inclua a tag update-ownership
ao sysconfig
XML para cada pacote desta
forma:
<update-ownership package="com.example.application" installer="com.example.installer" />
Neste exemplo, com.example.application
é o pacote de apps a ser adquirido, e
com.example.installer
é o proprietário do pacote. Quando a propriedade de um pacote
pode ser atualizada, outras lojas ou instaladores com privilégio precisam
identificar o proprietário da atualização e obter consentimento do usuário para atualizar o app.
Desativar alterações de propriedade em pacotes
Sua loja ou instalador pode desativar a atualização de propriedade de um subconjunto de pacotes fornecendo uma lista de bloqueio no APK. Com a inclusão de um pacote nessa lista, nenhuma loja ou instalador pode solicitar a atualização da propriedade do pacote.
Para não permitir atualização de pacotes por outra loja ou instalador:
Inclua a propriedade abaixo no arquivo
AndroidManifest.xml
da loja ou instalador original:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
Esse exemplo refere-se a uma lista de bloqueio XML chamada
legacyOwnershipDenylist
.Crie uma lista de bloqueio como um 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 um instalador solicitar a propriedade de um pacote que esteja em uma lista de bloqueio, a propriedade não será concedida, e o pacote vai continuar instalado, mas não será de propriedade de nenhum instalador. Além disso, independente do instalador, um app que esteja em uma lista de bloqueio não será de propriedade de ninguém.
O conjunto de pacotes dessa lista pode ser alterado com uma atualização no APK do instalador que fornece a lista. Qualquer propriedade que esteja definida para um pacote e que seja depois incluída em uma lista de bloqueio é excluída quando o instalador é atualizado. Dessa forma, atualizações futuras feitas no pacote de apps da lista de bloqueio não vão exigir interação com o usuário.
Identificar o proprietário da atualização e pedir o consentimento do usuário
Com o Android 14, mesmo que uma loja ou um instalador de apps tenha a
permissão android.permission.INSTALL_PACKAGES
, ela ou ele ainda precisará processar o estado
STATUS_PENDING_USER_ACTION
se quiser atualizar um app cujas atualizações sejam de propriedade de outra loja ou outro instalador.
O
app de exemplo InstallAPKSessionApi.java
também mostra como lidar com STATUS_PENDING_USER_ACTION
.
Estabelecer a propriedade para apps pré-carregados
Em geral, apps pré-carregados não são de propriedade de um instalador específico, mas são atribuídos a um novo proprietário, usando a configuração do sistema, conforme mostrado em Ativar a atualização de propriedade em pacotes.