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.

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.

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.

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.

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.

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.

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.