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:
- Se as opções do desenvolvedor ainda não estiverem ativadas, ative-as.
- Abra o app Configurações do seu dispositivo e navegue até Sistema > Avançado > Opções do desenvolvedor > Mudanças na compatibilidade de apps.
- 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 paraANONYMIZED_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 otargetSDKVersion
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 portargetSDKVersion
, 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 dastargetSDKVersion
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:
- Se as opções do desenvolvedor ainda não estiverem ativadas, ative-as.
- 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.
- Selecione seu app na lista.
Na lista de mudanças, encontre a mudança que você quer ativar ou desativar e toque na chave.
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)
.