Mudanças no framework de compatibilidade (Android {/9}11)

Esta página descreve cada mudança de comportamento que afeta o app e que foi adicionada ao framework de compatibilidade no Android 11 (nível 30 da API). Use esta lista em junção com as opções do desenvolvedor e comandos adb para testar e depurar seu app enquanto você se prepara para direcionar ao Android 11.

ADD_CONTENT_OBSERVER_FLAGS

ID da mudança: 150939131

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps voltados para o Android 11, há uma nova sobrecarga de API public onChange(boolean, Uri, int) que inclui um argumento flags de inteiro.

Esse novo método é uma alternativa pública do SDK para apps que usam o método sobrecarregado onChange() não SDK que inclui um argumento inteiro userId.

ADMIN_APP_PASSWORD_COMPLEXITY

ID da mudança: 123562444

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps de administrador voltados para o Android 11, gere um erro sempre que um app definir um requisito de senha que não seja relevante para a qualidade da senha atualmente atribuída. Por exemplo, quando a qualidade da senha é definida como DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, um app não poderia definir um comprimento de senha mínimo. Nesse caso, antes de tentar definir o comprimento mínimo da senha, o app precisa primeiro chamar o método setPasswordQuality() e só então chamar o método setPasswordMinimumLength().

Além disso, quando um app de administrador voltado para o Android 11 diminui a qualidade da senha, todos os requisitos de senha existentes que não são mais aplicáveis são redefinidos para os valores padrão.

APP_DATA_DIRECTORY_ISOLATION

ID da mudança: 143937733

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Apps voltados para o Android 11 não podem mais acessar arquivos em diretórios de dados particulares de nenhum app, independentemente da versão do SDK de destino do outro app.

Para saber mais, consulte Acesso a diretórios privados.

APN_READING_PERMISSION_CHANGE_ID

ID da mudança: 124107808

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps destinados ao Android 11, o acesso ao banco de dados APN agora requer a permissão Manifest.permission.WRITE_APN_SETTINGS.

Para saber mais sobre essa mudança, consulte Acesso de leitura restrito ao banco de dados do APN.

BACKGROUND_RATIONALE_CHANGE_ID

ID da mudança: 147316723

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Agora, os apps precisam fornecer uma justificativa válida sempre que solicitarem acesso à localização do dispositivo em segundo plano.

Para saber mais sobre essa mudança, consulte o guia sobre como acessar a localização em segundo plano no Android 11 que discute mudanças de privacidade relacionadas à localização no Android 11.

CALLBACK_ON_CLEAR_CHANGE

ID da mudança: 119147584

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Sempre que Editor.clear é chamado, um callback para OnSharedPreferenceChangeListener.onSharedPreferenceChanged é feito com uma chave null.

Para saber mais sobre essa mudança, consulte Mudanças de callback para OnSharedPreferenceChangeListener.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

ID da mudança: 130595455

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Os códigos de erro estão expandidos para updateAvailableNetworks(List, Executor, Consumer) e setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer).

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

ID da mudança: 148180766

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Essa é uma mudança de comportamento sutil para startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Antes dessa mudança, o sistema era chamado de volta para a operação trocada. Após a mudança, o sistema faz o callback para a operação realmente solicitada ou todas as operações trocadas se nenhuma operação for especificada.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

ID da mudança: 136219221

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps voltados para o Android 11, os serviços em primeiro plano só recebem recursos em uso de câmera e microfone quando o R.attr.foregroundServiceType está configurado como ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA e ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE, respectivamente, no arquivo de manifesto. Em versões anteriores do Android, os serviços em primeiro plano recebiam automaticamente recursos de câmera e microfone.

Para saber mais sobre essa mudança, consulte Tipos de serviço em primeiro plano no Android 11.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

ID da mudança: 128611929

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Os apps não podem mais postar avisos personalizados em segundo plano. No entanto, os apps ainda podem postar avisos em segundo plano usando o método Toast.makeText(Context, CharSequence, int) e variantes dele.

Para saber mais sobre essa mudança, consulte Visualizações de avisos personalizadas estão bloqueadas.

CHANGE_RESTRICT_SAW_INTENT

ID da mudança: 135920175

Estado padrão: essa mudança não pode ser ativada ou desativada. Ela é registrada apenas pelo framework de compatibilidade.

Intents que usam a ação android.settings.MANAGE_APP_OVERLAY_PERMISSION e o esquema de dados URI package não direcionam mais o usuário para uma tela específica do app para gerenciar a permissão associada. Em vez disso, o usuário é direcionado para uma tela em que pode gerenciar todos os apps que solicitaram a permissão.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

ID da mudança: 147798919

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Os avisos de texto agora são renderizados pela SystemUI em vez de no app. Isso evita que apps burlem as restrições de postagem de avisos personalizados em segundo plano.

DEFAULT_SCOPED_STORAGE

ID da mudança: 149924527

Estado padrão: ativada para todos os apps.

Todos os apps voltados para o Android 11 agora usam o armazenamento com escopo por padrão e não podem mais desativá-lo.

No entanto, é possível testar o app sem armazenamento com escopo, independentemente da versão do SDK de destino e dos valores de sinalização do manifesto do app, desativando essa mudança.

Para saber mais sobre as mudanças no armazenamento com escopo no Android 11, consulte a seção armazenamento com escopo na página sobre mudanças no armazenamento do Android 11.

EMPTY_INTENT_ACTION_CATEGORY

ID da mudança: 151163173

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps direcionados ao Android 11, o sistema gera um erro se action ou category de um filtro de intent for uma string vazia. Um bug na plataforma anterior ao Android 11 permitia que esse caso fosse transmitido sem gerar um erro. Isso não inclui casos em que o atributo é nulo ou ausente, porque isso sempre gerou um erro.

FILTER_APPLICATION_QUERY

ID da mudança: 135549675

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Os apps precisam declarar os pacotes e as intents que pretendem usar antes de ver detalhes sobre outros apps em um dispositivo. Essas declarações precisam ser feitas usando a tag <queries> no manifesto do app.

Para saber mais sobre como consultar e interagir com outros apps instalados no Android 11, consulte a página de privacidade visibilidade do pacote.

FORCE_ENABLE_SCOPED_STORAGE

ID da mudança: Valor: 132649864

Estado padrão: desativada para todos os apps.

Todos os apps voltados para o Android 11 agora usam o armazenamento com escopo por padrão e não podem mais desativá-lo.

No entanto, se o app ainda for direcionado ao Android 10 (API de nível 29) ou anterior, teste o app com armazenamento com escopo, independentemente da versão do SDK de destino e dos valores de sinalização do manifesto, ativando essa opção.

Para saber mais sobre as mudanças no armazenamento com escopo no Android 11, consulte a seção armazenamento com escopo na página sobre mudanças no armazenamento do Android 11.

GET_DATA_CONNECTION_STATE_R_VERSION

ID da mudança: 148535736

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para verificar a versão do SDK para PreciseDataConnectionState#getDataConnectionState.

GET_DATA_STATE_R_VERSION

ID da mudança: 148534348

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para verificar a versão do SDK para getDataState().

GET_PROVIDER_SECURITY_EXCEPTIONS

ID da mudança: 150935354

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps direcionados para o Android 11 (API de nível 30) ou versões mais recentes, o getProvider(String) não gera mais exceções de segurança.

GET_TARGET_SDK_VERSION_CODE_CHANGE

ID da mudança: 145147528

Estado padrão: ativado para apps voltados para o Android 10 (API de nível 29) ou mais recente.

Para verificar a versão do SDK para o método SmsManager.sendResolverResult().

GWP_ASAN

ID da mudança: 135634846

Estado padrão: desativada para todos os apps.

Ativa a detecção de bugs de memória nativa de amostra em apps.

Para saber mais sobre essa mudança, consulte o Guia do GWP-ASan.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

ID da mudança: 149997251

Estado padrão: ativado para apps voltados para o Android 10 (API de nível 29) ou mais recente.

Para apps direcionados para o Android 10 (nível da API 29) ou mais recentes, remove o acesso a todas as interfaces não SDK que fazem parte da lista max-target-p (greylist-max-p) do Android 10 (nível da API 29).

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

ID da mudança: 149994052

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps direcionados para o Android 11 (nível da API 30) ou mais recentes, remove o acesso a todas as interfaces não SDK que fazem parte da lista max-target-q (greylist-max-q) do Android 11 (nível da API 30).

Para saber mais sobre essa mudança, consulte Interfaces não SDK que agora estão bloqueadas no Android 11.

LISTEN_CODE_CHANGE

ID da mudança: 147600208

Estado padrão: ativado para apps voltados para o Android 10 (API de nível 29) ou mais recente.

Para verificar a versão do SDK para TelephonyManager.listen(PhoneStateListener, int).

MISSING_APP_TAG

ID da mudança: 150776642

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps direcionados ao Android 11, um erro agora é gerado quando o arquivo de manifesto de um app não tem uma tag application ou instrumentation.

NATIVE_HEAP_POINTER_TAGGING

ID da mudança: 135754954

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps voltados para o Android 11, as alocações de heap nativas agora têm uma tag diferente de zero no byte mais significativo.

Para saber mais, consulte Inclusão de tag de ponteiro de heap.

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

ID da mudança: 150880553

Estado padrão: ativada para todos os apps.

Para apps direcionados ao Android 11, agora há um limite no número de objetos PhoneStateListener que qualquer processo pode registrar via TelephonyManager.listen(PhoneStateListener, int). O limite padrão é 50, que pode ser alterado por atualizações de configuração remota do dispositivo. Esse limite é aplicado usando um IllegalStateException gerado por TelephonyManager.listen(PhoneStateListener, int) quando o processo ofensivo tenta registrar um número excessivo de listeners.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

ID da mudança: 142365358

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Os apps direcionados para o Android 11 não podem mais usar uma camada extra de reflexão para acessar interfaces não SDK restritas.

PROCESS_CAPABILITY_CHANGE_ID

ID da mudança: 136274596

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps voltados para o Android 11, a sinalização Context.BIND_INCLUDE_CAPABILITIES agora pode ser usada para transmitir recursos em uso do processo do cliente para um serviço vinculado.

REMOVE_ANDROID_TEST_BASE

ID da mudança: 133396946

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para apps direcionados para o Android 11, a biblioteca android.test.base foi removida se o app não depende de android.test.runner (porque depende das classes da biblioteca android.test.base).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID da mudança: 136293963

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Para serviços de acessibilidade voltados para o Android 11, a sinalização FLAG_REQUEST_ACCESSIBILITY_BUTTON precisa ser especificada no arquivo de metadados do serviço de acessibilidade. Caso contrário, ela será ignorada.

Para saber mais sobre essa mudança, consulte Declarar o uso do botão de acessibilidade no arquivo de metadados.

RESOURCES_ARSC_COMPRESSED

ID da mudança: 132742131

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Os apps destinados ao Android 11 (API de nível 30) 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.

Para saber mais sobre essa mudança, consulte Arquivos de recursos compactados.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

ID da mudança: 141600225

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Se o app for voltado para o Android 11 e usar o Framework de acesso ao armazenamento (SAF, na sigla em inglês), não será mais possível acessar determinados diretórios usando as ações da intent ACTION_OPEN_DOCUMENT e ACTION_OPEN_DOCUMENT_TREE. Para saber mais sobre essas mudanças, consulte a seção de restrições de acesso ao documento na página que discute atualizações de privacidade relacionadas a armazenamento no Android 11.

SELINUX_LATEST_CHANGES

ID da mudança: 143539591

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Essa mudança permite que os apps acessem o domínio SELinux untrusted_app_R-targetSDk. Essa é uma das mudanças fundamentais no framework de compatibilidade que permite que os apps alternem outras mudanças controladas por targetSdkVersion sem modificar as targetSDKVersion do app. Por esse motivo, não desative essa mudança para um app direcionado ao Android 11, porque o app não funcionará.

Essa mudança não tem efeito para apps que usam um ID do usuário compartilhado.

THROW_SECURITY_EXCEPTIONS

ID da mudança: 147340954

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Antes do Android 11, um SecurityException só seria gerado por APIs setEnabled para um erro de permissão. No Android 11, isso não é mais válido, e um SecurityException pode ser gerado por vários motivos, e nenhum deles é exposto ao autor da chamada.

Para manter o comportamento já existente da API, se ocorrer uma falha de permissão legada ou falha de aplicação de ação em um app que não direcionado ao Android 11, a exceção será forçada para um IllegalStateException que existia na fonte antes do Android 11.

USE_SET_LOCATION_ENABLED

ID da mudança: 117835097

Estado padrão: ativado para apps direcionados para o Android 11 (API de nível 30) ou mais recente.

Apps de administrador voltados para o Android 11 não podem mais usar DevicePolicyManager.setSecureSetting(ComponentName, String, String) para mudar a configuração Settings.Secure.LOCATION_MODE obsoleta. Em vez disso, eles usarão DevicePolicyManager.setLocationEnabled(ComponentName, boolean).