Mudanças de comportamento: apps direcionados ao Android 11

Como nas versões anteriores, o Android 11 inclui mudanças de comportamento que podem afetar seu app. As seguintes mudanças de comportamento se aplicam exclusivamente a apps direcionados ao Android 11 ou versão mais recente. Caso seu app defina targetSdkVersion como 30, modifique o app para que ele seja compatível com esses comportamentos de forma adequada, quando for relevante.

Veja também a lista de mudanças de comportamento que afetam todos os apps executados no Android 11.

Privacidade

O Android 11 introduz mudanças e restrições para melhorar a privacidade do usuário, incluindo:

Para saber mais, consulte a página Privacidade.

Segurança

Inclusão de tag de ponteiro de heap

Detalhes da mudança

Nome da mudança: NATIVE_HEAP_POINTER_TAGGING

ID da mudança: 135754954

Como ativar

Ao testar a compatibilidade do app com o Android 11, é possível ativar ou desativar essa mudança usando os seguintes comandos ADB:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Para ver mais informações sobre o framework de compatibilidade e a ativação ou desativação de mudanças, consulte Testar a compatibilidade do app com o Android 11.

Os ponteiros de heap agora têm uma tag diferente de zero no byte mais significativo (MSB, na sigla em inglês). Aplicativos que usam ponteiros incorretamente, incluindo os que modificam o MSB, podem falhar ou ter outros problemas. Essa mudança é necessária para oferecer compatibilidade a hardwares futuros com a extensão ARM Memory Tagging Extension (MTE) ativada. Para saber mais, consulte Ponteiros com tag.

Para desativar esse recurso, consulte a documentação do manifesto allowNativeHeapPointerTagging.

As visualizações de avisos personalizadas estão bloqueadas

Detalhes da mudança

Nome da mudança: CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

ID da mudança: 128611929

Como ativar

Ao testar a compatibilidade do app com o Android 11, é possível ativar ou desativar essa mudança usando os seguintes comandos ADB:

adb shell am compat enable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME
adb shell am compat disable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME

Para ver mais informações sobre o framework de compatibilidade e a ativação ou desativação de mudanças, consulte Testar a compatibilidade do app com o Android 11.

A partir do Android 11, as visualizações de avisos personalizados foram suspensas. Se o app for direcionado ao Android 11, os avisos que contêm visualizações personalizadas são bloqueados quando enviados do segundo plano. As visualizações de avisos personalizados continuarão a funcionar se você direcioná-lo a uma versão mais antiga do Android, mas o uso delas não é recomendado.

É recomendado que você use snackbars sempre que possível. Se o caso de uso do app impedir o uso de snackbars, como quando for preciso enviar uma mensagem enquanto o app estiver em segundo plano, ainda será possível usar avisos em texto, porque eles não são limitados pela nova mudança de comportamento.

Para saber mais sobre essas mudanças, consulte Atualizações de avisos no Android 11.

Conectividade

Acesso de leitura restrito ao banco de dados do APN

Detalhes da mudança

Nome da mudança: APN_READING_PERMISSION_CHANGE_ID

ID da mudança: 124107808

Como ativar

Ao testar a compatibilidade do app com o Android 11, é possível ativar ou desativar essa mudança usando os seguintes comandos ADB:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Para ver mais informações sobre o framework de compatibilidade e a ativação ou desativação de mudanças, consulte Testar a compatibilidade do app com o Android 11.

Apps direcionados ao Android 11 agora exigem a permissão privilegiada Manifest.permission.WRITE_APN_SETTINGS para ler ou acessar o banco de dados APN do provedor de Telefonia. A tentativa de acessar o banco de dados APN sem essa permissão gera uma exceção de segurança.

Acessibilidade

Declarar o uso do botão de acessibilidade no arquivo de metadados

Detalhes da mudança

Nome da mudança: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID da mudança: 136293963

Como ativar

Ao testar a compatibilidade do app com o Android 11, é possível ativar ou desativar essa mudança usando os seguintes comandos ADB:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Para ver mais informações sobre o framework de compatibilidade e a ativação ou desativação de mudanças, consulte Testar a compatibilidade do app com o Android 11.

A partir do Android 11, o serviço de acessibilidade não pode declarar uma associação com o botão de acessibilidade do sistema no ambiente de execução. Se AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON for anexado à propriedade flags de um objeto AccessibilityServiceInfo, o framework não transmitirá eventos de callback do botão de acessibilidade do serviço.

Em vez disso, declare a associação do serviço de acessibilidade com o botão de acessibilidade usando a sinalização flagRequestAccessibilityButton no arquivo de metadados do serviço, normalmente res/raw/accessibilityservice.xml.

Câmera

Ações da intent de mídia exigem a câmera padrão do sistema

A partir do Android 11, apenas apps pré-instalados de câmera do sistema podem responder às seguintes ações de intent:

Se mais de um app pré-instalado de câmera do sistema estiver disponível, o sistema apresentará uma caixa de diálogo para o usuário selecionar um app. Se você quiser que seu app use um app específico de câmera de terceiros para capturar imagens ou vídeos, defina um nome ou componente de pacote para a intent.

Instalação e empacotamento de apps

Arquivos de recursos compactados

Detalhes da mudança

Nome da mudança: RESOURCES_ARSC_COMPRESSED

ID da mudança: 132742131

Como ativar

Ao testar a compatibilidade do app com o Android 11, é possível ativar ou desativar essa mudança usando os seguintes comandos ADB:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Para ver mais informações sobre o framework de compatibilidade e a ativação ou desativação de mudanças, consulte Testar a compatibilidade do app com o Android 11.

Apps direcionados ao Android 11 (API de nível 30) ou versões mais recentes não poderão ser instalados se contiverem um arquivo compactado resources.arsc ou se esse arquivo não estiver alinhado em um limite de 4 bytes. Esse arquivo não pode ser mapeado na memória pelo sistema se uma dessas condições estiver presente. As tabelas de recursos que não podem ser mapeadas na memória precisam ser lidas em um buffer na RAM, resultando em pressão de memória desnecessária no sistema e aumentando significativamente o uso de RAM do dispositivo.

Esquema de assinatura do APK v2 obrigatório

Os apps destinados ao Android 11 (API de nível 30) que atualmente são assinados apenas com o Esquema de assinatura do APK v1 também precisam ser assinados com o Esquema de assinatura do APK v2 ou mais recente. Os usuários não podem instalar ou atualizar apps assinados apenas com o Esquema de assinatura do APK v1 em dispositivos que executam o Android 11.

Para verificar se o app está sendo assinado com o Esquema de assinatura do APK v2 ou mais recente, use o Android Studio ou a ferramenta apksigner na linha de comando.

Firebase

Firebase JobDispatcher e GCMNetworkManager

Se o app for direcionado à API de nível 30 ou mais recente, as chamadas de API Firebase JobDispatcher e GcmNetworkManager serão desativadas em dispositivos com o Android 6.0 (API de nível 23) ou mais recentes. Para ver informações sobre migração, consulte Migrar do Firebase JobDispatcher para o WorkManager e Migrar do GCMNetworkManager para o WorkManager.

Transferência de arquivos entre dispositivos

Se o app for direcionado ao Android 11, não será mais possível desativar a migração dos arquivos do app entre dispositivos usando o atributo allowBackup. O sistema permite automaticamente essa funcionalidade.

No entanto, ainda é possível desativar o backup e a restauração dos arquivos do app baseados na nuvem definindo o atributo allowBackup como false, mesmo que o app seja direcionado ao Android 11.

Mudanças do callback para OnSharedPreferenceChangeListener

Detalhes da mudança

Nome da mudança: CALLBACK_ON_CLEAR_CHANGE

ID da mudança: 119147584

Como ativar

Ao testar a compatibilidade do app com o Android 11, é possível ativar ou desativar essa mudança usando os seguintes comandos ADB:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Para ver mais informações sobre o framework de compatibilidade e a ativação ou desativação de mudanças, consulte Testar a compatibilidade do app com o Android 11.

Para apps direcionados ao Android 11 (nível da API 30), sempre que Editor.clear for chamado, um callback agora será feito para OnSharedPreferenceChangeListener.onSharedPreferenceChanged com uma chave null.

Restrições da interface não SDK

O Android 11 inclui listas atualizadas de interfaces não SDK restritas baseadas na colaboração com desenvolvedores do Android e nos testes internos mais recentes. Antes de restringir interfaces não SDK, sempre que possível, garantimos que haja alternativas públicas disponíveis.

Caso seu app não seja voltado para o Android 11, talvez algumas dessas mudanças não afetem você imediatamente. No entanto, embora você possa usar algumas interfaces não SDK (dependendo do nível da API de destino do seu app), o uso de qualquer método ou campo não SDK sempre apresenta alto risco de quebra do app.

Se você não sabe se o app usa interfaces não SDK, é possível testá-lo para descobrir. Se ele depende de interfaces não SDK, planeje uma migração para alternativas SDK. No entanto, entendemos que alguns apps têm casos de uso válidos para interfaces não SDK. Caso você não encontre uma alternativa para deixar de usar uma interface não SDK em um recurso no app, solicite uma nova API public.

Para saber mais sobre as mudanças dessa versão do Android, consulte Atualizações para restrições para interfaces não SDK no Android 11. Para saber mais sobre interfaces não SDK em geral, consulte Restrições para interfaces não SDK.