A plataforma Android 11 inclui mudanças de comportamento que podem afetar seu app. As mudanças de comportamento a seguir se aplicam a todos os apps quando executados no Android 11, independentemente de targetSdkVersion. Teste seu app e modifique-o conforme necessário para ficar compatível com essas mudanças, quando aplicável.
Consulte também a lista de mudanças de comportamento que afetam apenas os apps direcionados ao Android 11.
Permissões únicas: oferece aos usuários a opção de conceder acesso temporário às permissões de localização, microfone e câmera.
Visibilidade da caixa de diálogo de permissão: recusas repetidas de uma permissão implicam "não perguntar novamente".
Auditoria de acesso a dados: receba informações sobre onde seu app acessa dados particulares, tanto no código do app quanto no código das bibliotecas dependentes.
Permissões da janela de alerta do sistema: determinadas classes de apps recebem automaticamente a permissão SYSTEM_ALERT_WINDOW mediante solicitação. Além disso, as intents que incluem a ação da intent ACTION_MANAGE_OVERLAY_PERMISSION sempre levam os usuários a uma tela nas configurações do sistema.
Identificadores de chip permanentes: no Android 11 e em versões mais recentes, o acesso a ICCIDs não reconfiguráveis por meio de getIccId() é restrito. O método retorna uma string vazia não nula. Para identificar exclusivamente um chip instalado no dispositivo, use o método getSubscriptionId(). O ID da assinatura fornece um valor de índice (começando em 1) para identificar exclusivamente chips instalados, incluindo físicos e eletrônicos. O valor desse identificador é estável para um determinado chip, a menos que o dispositivo seja redefinido para a configuração original.
Notificações de Exposição
O Android 11 atualiza a plataforma para adequá-la ao Sistema de Notificação de Exposição. Agora, os usuários podem executar apps de Notificações de Exposição no Android 11 sem precisar ativar a configuração de localização do dispositivo. Essa é uma exceção exclusiva do Sistema de Notificação de Exposição, que foi projetado de maneira a não permitir que os apps que o utilizam consigam inferir a localização do dispositivo por meio da busca por Bluetooth.
Para proteger a privacidade do usuário, todos os outros apps não podem realizar a busca por Bluetooth, a menos que a configuração de localização do dispositivo esteja ativada e o usuário tenha concedido a permissão de localização. Leia mais na postagem Atualização das Notificações de Exposição (em inglês).
Soquetes SSL usam o mecanismo SSL do Conscrypt por padrão
A implementação SSLSocket padrão do Android é baseada em Conscrypt (link em inglês). Desde o Android 11, essa implementação é criada internamente no SSLEngine do Conscrypt.
Alocador reforçado Scudo
O Android 11 usa o Alocador reforçado Scudo internamente para fazer o serviço de alocações de heap. O Scudo é capaz de detectar e atenuar alguns tipos de violações de segurança da memória. Se você estiver vendo falhas relacionadas ao Scudo (por exemplo, Scudo ERROR:) em relatórios de falhas nativas, consulte a documentação Solução de problemas do Scudo.
Estatísticas de uso do app
Para proteger melhor os usuários, o Android 11 armazena as estatísticas de uso de apps de cada usuário em armazenamento criptografado por credencial. Portanto, nem o sistema nem os apps podem acessar esses dados, a menos que isUserUnlocked() retorne true, o que ocorre após um dos acontecimentos a seguir:
O usuário desbloqueia o dispositivo pela primeira vez após a inicialização do sistema.
O usuário muda para a própria conta no dispositivo.
Se o app já estiver vinculado a uma instância de UsageStatsManager, verifique se você chama métodos neste objeto depois que o usuário desbloqueia o dispositivo. Caso contrário, a API retornará valores nulos ou vazios.
Compatibilidade com emulador para 5G
O Android 11 adicionou APIs 5G para permitir que seus apps adicionem recursos modernos. Para testar os recursos adicionados, você pode usar os novos recursos do emulador do SDK do Android. A nova funcionalidade foi adicionada à versão 30.0.22 do emulador. Ao selecionar as configurações de rede 5G, TelephonyDisplayInfo é definido como OVERRIDE_NETWORK_TYPE_NR_NSA, a largura de banda estimada é modificada e permite definir a limitação para verificar se o app responde apropriadamente às mudanças no status NET_CAPABILITY_TEMPORARILY_NOT_METERED.
Desempenho e depuração
A chamada da API JobScheduler limita a depuração
O Android 11 oferece compatibilidade de depuração para que os apps identifiquem possíveis invocações da API JobScheduler que tenham excedido determinadas limitações de taxa. Os desenvolvedores podem usar esse recurso para identificar possíveis problemas de desempenho. Para apps com o atributo de manifesto debuggable definido como verdadeiro, as invocações da API JobScheduler além das limitações de taxa retornarão RESULT_FAILURE. As limitações são definidas de forma que os casos de uso legítimos não sejam afetados.
Limpador do descritor do arquivo (fdsan)
O Android 10 introduziu o fdsan (limpador do descritor do arquivo). O fdsan detecta o uso incorreto da propriedade do descritor do arquivo, como uso após fechamento e fechamento duplo. O modo padrão do fdsan está mudando no Android 11. Agora, o fdsan é cancelado após a detecção de um erro. O comportamento anterior era registrar um aviso e continuar. Se você estiver vendo falhas no seu app devido a fdsan, consulte fdsan documentation.
Biblioteca compartilhada do Google Maps v1 removida
A V1 da biblioteca compartilhada do Google Maps foi completamente removida no Android 11. O uso dessa biblioteca foi suspenso anteriormente e deixou de funcionar para apps no Android 10. Apps que antes dependiam dessa biblioteca compartilhada para dispositivos com o Android 9 (API de nível 28) ou versões anteriores precisam usar o SDK do Google Maps para Android.
Importante: depois de migrar para o SDK do Google Maps para Android, remova a referência para a v1 da biblioteca compartilhada do Google Maps do elemento <uses-library> no arquivo de manifesto do app. Os apps não podem mais usar a filtragem do Google Play com a biblioteca compartilhada do Google Maps v1 e o elemento <uses-library>.
Interação com outros apps
Compartilhar URIs de conteúdo
Se o app compartilhar um URI de conteúdo com outro app, o intent precisará conceder permissões de acesso ao URI definindo pelo menos uma das seguintes sinalizações de intent: FLAG_GRANT_READ_URI_PERMISSION e FLAG_GRANT_WRITE_URI_PERMISSION. Assim, se o outro app for direcionado ao Android 11, ele ainda poderá acessar o URI de conteúdo. Seu app precisa incluir as sinalizações de intent mesmo quando o URI de conteúdo está associado a um provedor de conteúdo que não é seu.
Caso o app seja proprietário do provedor de conteúdo associado ao URI de conteúdo, verifique se o provedor de conteúdo não é exportado. Recomendamos essa prática de segurança.