Mudanças de comportamento: apps direcionados ao Android 11

A plataforma Android 11 inclui mudanças de comportamento que podem afetar seu app. As mudanças de comportamento a seguir se aplicam exclusivamente a apps direcionados ao Android 11 ou versões mais recentes. Caso seu app defina targetSdkVersion como "android-R", 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 muitas mudanças e restrições para melhorar a privacidade do usuário. Para saber mais, consulte a página Privacidade.

Arquivo de recurso compactado

Apps direcionados ao Android 11 (API de nível "R") ou versões mais recentes não poderão ser instalados se contiverem um arquivo resources.arsc compactado ou se esse arquivo não estiver alinhado quanto a 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

VPNs de alto desempenho

Os apps direcionados à API de nível "R" ou mais recente ou que são executados em dispositivos iniciados na API de nível 29 e mais recentes, podem aplicar IKEv2/IPsec a VPNs configuradas pelo usuário e com base em apps.

As VPNs são executadas nativamente no sistema operacional, simplificando o código necessário para estabelecer conexões VPN IKEv2/IPset em um app.

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.

Controle de acesso à rede por processos

A partir do Android 11, os apps que gerenciam dados confidenciais do usuário podem conceder acesso à rede para cada processo. Ao especificar explicitamente quais processos têm permissão para acessar a rede, você isola todo o código que não precisa fazer upload de dados.

Embora seja possível que o app envie dados acidentalmente, isso oferece uma maneira de reduzir a possibilidade de bugs no app causarem um vazamento de dados.

Veja a seguir uma amostra de um arquivo de manifesto que usa a nova funcionalidade:

<processes>
    <process />
    <deny-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet1" />
    <process android:process="com.android.cts.useprocess.withnet1">
        <allow-permission android:name="android.permission.INTERNET" />
    </process>
    <allow-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet2">
        <deny-permission android:name="android.permission.INTERNET" />
    </process>
    <process android:process="com.android.cts.useprocess.withnet2" />
</processes>

Permitir várias configurações do Passpoint instalado com o mesmo FQDN

A partir do Android 11, é possível usar PasspointConfiguration.getUniqueId() para ter um identificador exclusivo para um objeto PasspointConfiguration, que permite aos usuários do app instalar vários perfis com o mesmo nome de domínio totalmente qualificado (FQDN, na sigla em inglês).

Essa funcionalidade é útil quando uma operadora implanta mais de uma combinação de código de país para dispositivos móveis (MCC, na sigla em inglês) e código de rede móvel (MNC, na sigla em inglês) na rede, mas tem apenas um único FQDN. No Android 11 e versões mais recentes, é possível instalar mais de um perfil com o mesmo FQDN que corresponderá à rede do provedor de hospedagem quando o usuário instalar um chip com a MCC ou MNC.

Segurança

Ordem aleatória de MAC

Em apps direcionados ao Android 10 (API de nível 29) e versões anteriores, a ordem aleatória de MAC é por SSID, já que o Passpoint pode se conectar a SSIDs diferentes para o mesmo perfil. Em apps direcionados ao Android 11 (API de nível "R") ou mais recentes, a ordem aleatória de MAC para redes de Passpoint é modificada para o nome de domínio totalmente qualificado (FQDN, na sigla em inglês).

Em apps direcionados à API de nível "R" e versões mais recentes, os apps sem privilégios não poderão acessar o endereço MAC do dispositivo. Somente as interfaces de rede com um endereço IPv4 ficarão visíveis. Isso afeta os métodos getifaddrs() e NetworkInterface.getHardwareAddress(), além do envio de mensagens netlink RTM_GETLINK.

Veja a seguir uma lista das maneiras que os apps são afetados por essa mudança:

  • NetworkInterface.getHardwareAddress() retorna "null" (nulo) para cada interface.
  • Os apps não podem usar a função bind() em soquetes NETLINK_ROUTE.
  • O comando ip não retorna informações sobre interfaces.

Essas mudanças impõem a orientação fornecida em Não trabalhe com endereços MAC.

A maioria dos desenvolvedores precisa usar as APIs de nível superior de ConnectivityManager em vez das APIs de nível inferior NetworkInterface/getifaddrs().

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.

Firebase

Firebase JobDispatcher e GCMNetworkManager

Se o app for direcionado à API de nível "R" 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.