Testar a compatibilidade do app com o Android 11

O Android 11 introduz ferramentas para testar e depurar seu app em relação às mudanças de comportamento na versão mais recente da plataforma. Essas ferramentas fazem parte de um novo framework de compatibilidade que permite que os desenvolvedores de apps ativem e desativem as mudanças individualmente. Use essa flexibilidade para desativar uma única mudança e continuar testando seu app em relação a outras mudanças na plataforma ou para isolar e testar somente uma mudança de comportamento de cada vez.

Os dois tipos de mudança de comportamento podem ser alternados, incluindo as mudanças que afetam todos os apps e as que afetam apenas apps voltados para o Android 11.

Como identificar quais mudanças estão ativadas

É possível verificar quais mudanças de comportamento estão ativadas atualmente usando as opções de desenvolvedor, logcat ou um comando ADB.

Identificar mudanças ativadas usando as opções do desenvolvedor

Figura 1. Tela de mudanças na compatibilidade de apps nas opções do desenvolvedor.

É possível ver quais mudanças estão ativadas no momento e ativar ou desativar essas mudanças nas opções do desenvolvedor de um dispositivo. Para acessar essas opções, siga estas etapas:

  1. Se as opções do desenvolvedor ainda não estiverem ativadas, ative-as.
  2. Abra o app Configurações do seu dispositivo e navegue até Sistema > Avançado > Opções do desenvolvedor > Mudanças na compatibilidade de apps.
  3. Selecione seu app na lista.

Cada mudança de comportamento geralmente pertence a uma destas duas categorias:

  • Mudanças que afetam todos os apps quando são executados no Android 11, independentemente do targetSdkVersion do app.

    Essas mudanças são ativadas por padrão no framework de compatibilidade e são listadas na interface do usuário na seção Mudanças ativadas por padrão.

  • Mudanças que afetam apenas apps direcionados para Android 11.

    Essas mudanças são ativadas por padrão no framework de compatibilidade se seu app for direcionado para Android 11 e são listadas na interface do usuário na seção Ativadas após o SDK 29.

Você também notará uma seção na figura 1 chamada Mudanças desativadas por padrão. As mudanças que se enquadram nessa seção geralmente são alterações experimentais.

Identificar mudanças ativadas usando o logcat

Para cada mudança de comportamento, na primeira vez durante o processo do app quando o app chama a API afetada, o sistema gera uma mensagem de logcat como esta:

D CompatibilityChangeReporter: Compat change id reported: 141455849; UID 10265; state: ENABLED

Cada mensagem de logcat inclui as seguintes informações:

ID da mudança
Indica qual mudança está afetando o app. Esse valor é mapeado para uma das mudanças de comportamento listadas na tela Mudanças na Compatibilidade de apps (consulte a figura 1). Neste exemplo, 141455849 é mapeado para ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID.
UID
Indica qual app é afetado pela mudança.
Estado

Indica se a mudança está afetando o app no momento.

O estado pode ser um destes valores:

Estado Significado
ENABLED A mudança está ativada e afetará o comportamento do app se ele usar as APIs que foram modificadas.
DISABLED

A mudança está desativada e não afetará o app.

Observação: se essa mudança for desativada porque o targetSDKVersion do app está abaixo do limite exigido (o app não está direcionado ao Android 11), a mudança será ativada por padrão quando o app aumentar o targetSDKVersion para direcionar ao Android 11.

LOGGED A mudança está sendo registrada por meio do framework de compatibilidade, mas não pode ser ativada ou desativada. Embora essa mudança não possa ser ativada ou desativada, ela ainda pode afetar o comportamento do app. Consulte a descrição da mudança na lista de mudanças de comportamento para ver mais informações. Em muitos casos, esses tipos de mudanças são experimentais e podem ser ignorados.

Identificar mudanças ativadas usando ADB

Execute o seguinte comando ADB para ver o conjunto completo de mudanças (ativas e desativadas) em todo o dispositivo:

adb shell dumpsys platform_compat

A saída lista as seguintes informações para cada mudança:

ID da mudança
Um identificador exclusivo para essa mudança de comportamento. Por exemplo, 141455849.
Nome
O nome dessa mudança de comportamento. Por exemplo: ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID.
critérios de targetSDKVersion

Por qual targetSDKVersion a mudança é controlada (se houver).

Por exemplo, se essa mudança estiver ativada apenas para apps direcionado ao SDK versão 30 ou mais recente, a saída será enableAfterTargetSdk=29. Se a mudança não for controlada por targetSDKVersion, a saída será enableAfterTargetSdk=0.

Modificações de pacotes

O nome de cada pacote em que o estado padrão da mudança (ativada ou desativada) foi modificado.

Por exemplo, se essa for uma mudança ativada por padrão, o nome do pacote do app será listado se você tiver desativado a mudança usando as opções do desenvolvedor ou o ADB. Nesse caso, o resultado seria:

packageOverrides={com.my.package=false}

Mudanças que são controladas por targetSDKVersion podem ser ativadas ou desativadas por padrão, de modo que a lista de pacotes pode incluir instâncias de verdadeiro ou falso, dependendo de cada uma das targetSDKVersion do app. Exemplo:

packageOverrides={com.my.package=true, com.another.package=false}

Quando ativar ou desativar as mudanças

O principal objetivo do framework de compatibilidade é oferecer a você controle e flexibilidade ao testar seu app com uma nova versão do Android.

Quando desativar as mudanças

As mudanças que afetam todos os apps são ativadas por padrão para uma versão específica da plataforma, independentemente da targetSDKVersion do app. Normalmente, convém testar e atualizar o app com essas mudanças primeiro para garantir que os usuários dessa versão da plataforma não tenham sua experiência no app prejudicada. Também é necessário priorizar o teste dessas mudanças porque elas não podem ser desativadas ao usar um build de lançamento público do Android (para proteger a segurança dos usuários finais).

Se seu app for direcionado a um targetSDKVersion específico, todas as mudanças que forem controladas por essa versão também serão ativadas por padrão.

Como seu app pode ser afetado por mais de uma dessas mudanças, elas podem ser desativadas individualmente. Caso seu app falhe, use essa abordagem para ajudar você a determinar qual mudança de plataforma provocou isso.

Quando ativar as mudanças

As mudanças controladas por um targetSDKVersion específico são desativadas por padrão sempre que um app estiver direcionado a uma versão do SDK anterior à versão controlada. Em alguns casos, convém ativar essas mudanças.

Por exemplo, é possível testar seu app em relação a uma série de mudanças de plataforma na próxima targetSdkVersion. Usando opções do desenvolvedor ou comandos ADB, é possível ativar e testar cada mudança bloqueada uma por uma, em vez de mudar o manifesto do app e ativar todas as mudanças de uma vez. Esse controle extra pode ajudar a testar as mudanças de forma isolada e evitar a depuração e a atualização de várias partes do app de uma vez só.

Ativar ou desativar mudanças

O framework de compatibilidade permite ativar ou desativar cada mudança usando as opções do desenvolvedor ou comandos ADB. Como a ativação ou desativação de mudanças pode fazer com que o app falhe ou desative mudanças de segurança importantes, existem algumas restrições de quando você pode ativar ou desativar mudanças.

Ativar ou desativar mudanças usando as opções do desenvolvedor

Use as opções do desenvolvedor para ativar ou desativar mudanças. Para encontrar as opções, siga estas etapas:

  1. Se as opções do desenvolvedor ainda não estiverem ativadas, ative-as.
  2. Abra o app de configurações do seu dispositivo e navegue até Sistema > Avançado > Opções do desenvolvedor > Mudanças na compatibilidade de apps.
  3. Selecione seu app na lista.
  4. Na lista de mudanças, encontre a mudança que você quer ativar ou desativar e toque na chave.

    Lista de mudanças que podem ser ativadas ou desativadas

Alternar mudanças usando ADB

Para ativar ou desativar uma mudança usando ADB, execute um dos seguintes comandos:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Transmita ou a CHANGE_ID (por exemplo, 141455849) ou CHANGE_NAME (por exemplo, ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID) e o PACKAGE_NAME do seu app.

Também é possível usar o seguinte comando para redefinir uma mudança para o estado padrão, removendo qualquer modificação que você tenha definido usando ADB ou as opções do desenvolvedor:

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Restrições sobre a alternância de mudanças

Por padrão, cada mudança de comportamento é ativada ou desativada. As mudanças que afetam todos os apps são ativadas por padrão. Outras mudanças são controladas por um targetSdkVersion. Essas mudanças são ativadas por padrão quando um app é direcionado a versão correspondente do SDK ou uma mais recente e são desativadas por padrão quando um app é direcionado a uma versão do SDK anterior à versão controlada. Ao ativar ou desativar uma mudança, você modifica o estado padrão dela.

Para impedir que o framework de compatibilidade seja usado de forma maliciosa, há algumas restrições sobre quando você pode ativar ou desativar as mudanças. Se é possível ou não ativar uma mudança depende do tipo de mudança, se o app é depurável e do tipo de build em execução no dispositivo. A tabela a seguir descreve quando é possível ativar ou desativar diferentes tipos de mudanças:

Tipo de compilação App não depurável App depurável
Todas as mudanças Mudanças controladas por targetSDKVersion Todas as outras mudanças
Visualização do desenvolvedor ou build Beta Não pode alternar Pode alternar Pode alternar
Build pública de usuário Não pode alternar Pode alternar Não pode alternar

Mudanças de comportamento incluídas no framework de compatibilidade

A lista nesta seção descreve cada mudança de comportamento incluída no framework de compatibilidade do Android 11. Use a lista em conjunto com as opções do desenvolvedor e comandos ADB para testar e depurar seu app.

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 modificado por meio de atualizações de configuração remota do dispositivo. Esse limite é garantido por uma IllegalStateException gerada a partir de TelephonyManager.listen(PhoneStateListener, int) quando o processo com problema tenta registrar muitos 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).