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

Figura 1. A tela "Mudanças na compatibilidade do app" nas opções do desenvolvedor lista as mudanças que podem ser ativadas ou desativadas.

Esta página descreve cada mudança de comportamento que faz parte do framework de compatibilidade no Android 12 (nível 31 da API). Use esta lista em conjunto com as opções do desenvolvedor e comandos adb para testar e depurar seu app enquanto você se prepara para oferecer suporte e direcionar para o Android 12.

Veja alguns exemplos do que você pode fazer usando as ferramentas do framework de compatibilidade:

  • Teste as mudanças esperadas sem realmente mudar a targetSdkVersion do app. Você pode usar as alternâncias para forçar a ativação de mudanças específicas de comportamento esperado e avaliar o impacto no app existente.
  • Concentre seus testes somente em mudanças específicas. Em vez de ter que resolver todas as mudanças esperadas de uma só vez, as alternâncias permitem as desativar, exceto as que você quer testar.
  • Gerencie alternâncias por meio do adb. Você pode usar comandos adb para ativar e desativar as mudanças alternáveis no seu ambiente de teste automatizado.
  • Depure mais rapidamente usando códigos de mudança padrão. Cada uma delas tem um código e um nome exclusivos que podem ser usados para depurar rapidamente a causa raiz na saída do registro.

Para ver informações completas sobre o uso das ferramentas em cada um desses casos, consulte Ferramentas do framework de compatibilidade.

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

Veja nesta lista descrições de cada mudança de comportamento incluída no framework de compatibilidade do Android 12.

É possível filtrar a lista de mudanças por Estado padrão.

Mudanças de comportamento adicionadas ao framework de compatibilidade no Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

ID da mudança:185004937
Estado padrão: desativada para todos os apps.

Quando ativado, aplica o sandbox da API Display a um pacote , independente do modo de janela. As APIs Display sempre vão fornecer os limites do app.

Para saber mais sobre essa mudança, consulte a seção na página de mudanças de comportamento do Android 12 sobre Métodos de exibição que foram descontinuados.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

ID da mudança:163400105
Estado padrão: ativada para apps destinados ao Android 12 (nível 32 da API) ou versões mais recentes.

A partir do Android 12, a plataforma pode oferecer sugestões não textuais, como imagens, usando a estrutura de preenchimento automático melhorada (consulte serviços de preenchimento automático). Normalmente, para que um app possa processar essas sugestões, ele precisa implementar a API OnReceiveContentListener.

Para facilitar a adoção dessa API em apps que já implementaram a API InputConnection.commitContent(InputContentInfo, int, Bundle), ela vai ser reutilizada como alternativa caso o OnReceiveContentListener ainda não tenha sido implementado pelo app. Esse substituto só é ativado no Android 12 (nível 31 da API). Esse ID da mudança desativa o substituto, para que os apps destinados ao Android 12 (nível 32 da API) e versões mais recentes tenham que implementar a API OnReceiveContentListener para aceitar sugestões não textuais.

BLOCK_FLAG_SLIPPERY

ID da mudança:157929241
Estado padrão: ativada para todos os apps.

Em apps executados no Android 12 (nível 31 da API), verifica se FLAG_SLIPPERY está sendo usada em alguma janela no app. Esperamos que essa sinalização seja usada apenas pelos componentes do sistema, já que é um campo sem suporte. Caso usada, ela será restrita.

BLOCK_GPS_STATUS_USAGE

ID da mudança:144027538
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps direcionados ao Android 12 (nível 31 da API) e mais recentes, todos os usos da API GpsStatus precisam ser substituídos pelas APIs GnssStatus.

BLOCK_IMMUTABLE_PENDING_INTENTS

ID da mudança:171317480
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, os objetos PendingIntent imutáveis transmitidos às APIs de localização geram uma IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

ID da mudança:169887240
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, as APIs LocationRequest do sistema não podem ser usadas com solicitações de localização PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

ID da mudança:158002302
Estado padrão: ativada para todos os apps.

Para preservar a segurança do sistema e uma boa experiência do usuário, o Android 12 impede que os apps consumam eventos de toque em que uma sobreposição oculte o app de forma não segura.

Para saber mais sobre essa mudança, consulte Eventos de toque não confiáveis estão bloqueados.

CALL_ACTIVITY_RESULT_BEFORE_RESUME

ID da mudança:78294732
Estado padrão: ativada para apps destinados ao Android 12 (nível 32 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 32 da API) e versões mais recentes, corrige o ciclo de vida do resultado da atividade para garantir que ele seja recebido antes do conteúdo ser retomado.

CAMERA_MIC_INDICATORS_NOT_PRESENT

ID da mudança:162547999
Estado padrão: desativada para todos os apps.

Indica que o dispositivo oferece suporte a indicadores de câmera e microfone. Se presente, vai ser false, porque o método CompatChanges#isChangeEnabled retornará true se o ID da mudança não estiver presente.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

ID da mudança:146211400
Estado padrão: ativada para apps destinados ao Android 12 (nível 32 da API) ou versões mais recentes.

Em apps destinados ao Android 12 (nível 32 da API) e versões mais recentes, o gerenciador não vai instalar um pacote se houver grupos de permissões incorretos. Os grupos de permissões só podem ser compartilhados entre apps que compartilham um certificado. Caso a permissão pertença a um grupo específico, o grupo também vai precisar ser definido.

CHANGE_ID_AUTH_STATE_DENIED

ID da mudança:181350407
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps clientes direcionados ao Android 12 (nível 31 da API) e mais recentes, uma SecurityException é gerada quando eles estão no estado de autorização negada e tentam enviar uma mensagem a um nanoapp.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

ID da mudança:136069189
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, uma SecurityException é gerada quando um app que não tem a permissão HIGH_SAMPLING_RATE_SENSORS é executado no modo de depuração e solicita taxas de amostragem maiores que 200 Hz.

DELIVER_HISTORICAL_LOCATIONS

ID da mudança:73144566
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, os clientes de local podem acessar localizações anteriores ao momento atual em algumas circunstâncias.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

ID da mudança:181658987
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps direcionados ao Android 12 (nível 31 da API) e versões mais recentes, oferece compatibilidade com versões anteriores para TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

ID da mudança:170503758
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, a plataforma pode reduzir o frame rate de um app para um divisor da taxa de atualização, se for mais indicado (por exemplo, se o app for chamado para Surface.setFrameRate(float, int)). Os apps receberão callbacks Choreographer.postFrameCallback(Choreographer.FrameCallback) e pressão de retorno no frame rate limitado. Os apps usam Display.getRefreshRate() e Display.Mode.getRefreshRate() para saber qual é a taxa de atualização da tela. Display.getRefreshRate() sempre retornará o frame rate do aplicativo e não a taxa de atualização da tela física para permitir que os apps façam o ritmo de frames corretamente. O Display.Mode.getRefreshRate() retornará o frame rate do app se ele for compilado para uma versão anterior e, a partir do Android 12 (nível 31 da API), retornará a taxa de atualização da tela física.

DOWNSCALED

ID da mudança:168419799
Estado padrão: desativada para todos os apps.

Essa mudança é a responsável por todas as mudanças de redução de escalonamento por buffer por app. A ativação dessa mudança permite que os seguintes fatores de escalonamento sejam aplicados:

Quando essa mudança é ativada para um pacote de apps, o app é forçado a ser redimensionado para o fator de escalonamento mais alto e ativado. Por exemplo, 80% será usado se 80% e 70% (DOWNSCALE_80 e DOWNSCALE_70) estiverem ativados.

DOWNSCALE_30

ID da mudança:189970040
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 30% da resolução vertical e horizontal da tela real.

DOWNSCALE_35

ID da mudança:189969749
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 35% da resolução vertical e horizontal da tela real.

DOWNSCALE_40

ID da mudança:189970038
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 40% da resolução vertical e horizontal da tela real.

DOWNSCALE_45

ID da mudança:189969782
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 45% da resolução vertical e horizontal da tela real.

DOWNSCALE_50

ID da mudança:176926741
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 50% da resolução vertical e horizontal da tela real.

DOWNSCALE_55

ID da mudança:189970036
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 55% da resolução vertical e horizontal da tela real.

DOWNSCALE_60

ID da mudança:176926771
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 60% da resolução vertical e horizontal da tela real.

DOWNSCALE_65

ID da mudança:189969744
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 65% da resolução vertical e horizontal da tela real.

DOWNSCALE_70

ID da mudança:176926829
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 70% da resolução vertical e horizontal da tela real.

DOWNSCALE_75

ID da mudança:189969779
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 75% da resolução vertical e horizontal da tela real.

DOWNSCALE_80

ID da mudança:176926753
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 80% da resolução vertical e horizontal da tela real.

DOWNSCALE_85

ID da mudança:189969734
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 85% da resolução vertical e horizontal da tela real.

DOWNSCALE_90

ID da mudança:182811243
Estado padrão: desativada para todos os apps.

Quando a propriedade DOWNSCALED também estiver ativada, ativar esta mudança para um pacote forçará o app a presumir que ele será executado em uma tela com 90% da resolução vertical e horizontal da tela real.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

ID da mudança:157629738
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Os apps para Android TV destinados ao Android 12 (nível 31 da API) e mais recentes precisam funcionar em qualquer tamanho da janela, incluindo tamanhos maiores que 1080p. Os apps destinados a versões anteriores do Android não esperam que as janelas sejam maiores que 1080p. Portanto, a janela será reduzida para 1080p quando necessário.

DROP_CLOSE_SYSTEM_DIALOGS

ID da mudança:174664120
Estado padrão: ativada para todos os apps.

Para melhorar o controle do usuário ao interagir com apps e com o sistema, a ação da intent ACTION_CLOSE_SYSTEM_DIALOGS foi suspensa a partir do Android 12.

Para saber mais sobre essa mudança, consulte Apps não podem fechar caixas de diálogo do sistema.

ENABLE_CHECKS_FOR_PRIVATE_FILES

ID da mudança:172100307
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Os apps destinados ao Android 12 (nível 31 da API) e mais recentes não podem inserir nem atualizar arquivos particulares usando o provedor de mídia.

ENABLE_DEFERRED_SCAN

ID da mudança:180326732
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Ative esta opção para adiar a verificação que é acionada como parte de MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

ID da mudança:157233955
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps direcionados ao Android 12 (nível 31 da API) e mais recentes, ativa a proteção READ_PHONE_STATE em APIs que consultam e notificam o estado da chamada, como TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription() e TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

ID da mudança:183407956
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps direcionados ao Android 12 (nível 31 da API) e mais recentes, ativa as proteções READ_PHONE_NUMBERS ou READ_PRIVILEGED_PHONE_STATE em getPhoneAccount(PhoneAccountHandle).

ENABLE_INCLUDE_ALL_VOLUMES

ID da mudança:182734110
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Ative esta opção para incluir linhas de bancos de dados de um volume desconectado recentemente no MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

ID da mudança:178209446
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Ative esta opção para autorizar que os apps com a permissão Manifest.permission.MANAGE_EXTERNAL_STORAGE solicitem acesso ao armazenamento externo bruto.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

ID da mudança:185199076
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, é necessário que todos os alarmes não exatos tenham um tamanho de janela mínimo de cerca de alguns minutos. Na prática, os alarmes que precisam de janelas menores são idênticos aos alarmes exatos e precisam usar as APIs correspondentes fornecidas, como setExact(int, long, PendingIntent). Alarmes não exatos com janelas menores especificada terão as janelas alongadas pelo sistema.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

ID da mudança:142191088
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Os apps destinados ao Android 12 (nível 31 da API) e mais recentes precisam declarar dependências para as bibliotecas compartilhadas nativas públicas definidas pelo fabricante do dispositivo, usando a tag uses-native-library no AndroidManifest.xml. Se alguma das dependências não for atendida (por exemplo, se uma delas não existir), o gerenciador de pacotes não instalará o app. A dependência pode ser especificada como opcional, usando o atributo android:required na tag. Nesse caso, deixar de atender a dependência não interromperá a instalação.

Depois de instalado, o app recebe apenas as bibliotecas compartilhadas nativas especificadas no manifesto dele. Chamar dlopen em uma biblioteca compartilhada nativa que não aparece no manifesto do app causará uma falha mesmo que a biblioteca exista no dispositivo.

ENFORCE_STRICT_QUERY_BUILDER

ID da mudança:143231523
Estado padrão: desativada para todos os apps.

Quando ativada, o SQLiteQueryBuilder verifica todas as seleções de consulta CalendarProvider2 em relação a argumentos maliciosos.

FGS_BG_START_RESTRICTION_CHANGE_ID

ID da mudança:170668199
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, restringe o momento em que os apps podem iniciar serviços em primeiro plano durante a execução em segundo plano.

FGS_START_EXCEPTION_CHANGE_ID

ID da mudança:174041399
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e versões mais recentes, permite que o sistema gere uma IllegalStateException caso um app tente iniciar um serviço em primeiro plano durante a execução em segundo plano.

FINISH_INPUT_NO_FALLBACK_CONNECTION

ID da mudança:156215187
Estado padrão: desativada para todos os apps.

Em apps direcionados ao Android 12 (nível 31 da API) e mais recentes, conclua a InputConnection quando o dispositivo se tornar non-interactive (não interativo).

Se ativado pelo input method atual, a conexão de entrada atual será finished (finalizada) sempre que os dispositivos se tornarem não interativos.

Se não estiver ativada, a conexão de entrada atual vai ser desativada silenciosamente quando os dispositivos se tornarem não interativos, e um par de métodos onFinishInput() e onStartInput() será enviado quando o dispositivo se tornar interativo novamente.

FORCE_DISABLE_HEVC_SUPPORT

ID da mudança:174227820
Estado padrão: desativada para todos os apps.

Força um app a deixar de ser compatível com o recurso de mídia HEVC. Os apps precisam declarar no manifesto os recursos de mídia compatíveis, mas essa sinalização pode ser usada para forçar um app a não oferecer suporte a HEVC, forçando a transcodificação ao acessar mídias codificadas em HEVC. A definição dessa sinalização substitui todos os padrões no nível do SO para apps. Ele fica desativado por padrão, o que significa que os padrões do SO têm prioridade. Se essa sinalização e FORCE_ENABLE_HEVC_SUPPORT estiverem ativadas, o SO vai ignorar as duas.

FORCE_ENABLE_HEVC_SUPPORT

ID da mudança:174228127
Estado padrão: desativada para todos os apps.

Força o app a oferecer suporte ao recurso de mídia HEVC. Os apps precisam declarar no manifesto os recursos de mídia compatíveis, mas essa sinalização pode ser usada para forçar um app a oferecer suporte a HEVC, evitando a transcodificação ao acessar mídia codificada em HEVC. A definição dessa sinalização substitui todos os padrões no nível do SO para apps. Ele fica desativado por padrão, o que significa que os padrões do SO têm precedência. Se essa sinalização e FORCE_DISABLE_HEVC_SUPPORT estiverem ativadas, o SO vai ignorar as duas sinalizações.

FORCE_NON_RESIZE_APP

ID da mudança:181136395
Estado padrão: desativada para todos os apps.

Força os pacotes em que é aplicada a não serem redimensionáveis.

FORCE_RESIZE_APP

ID da mudança:174042936
Estado padrão: desativada para todos os apps.

Força os pacotes em que é aplicada a serem redimensionáveis. Só permitimos o redimensionamento no modo de janelamento em tela cheia, mas não é possível forçar o app a entrar no modo redimensionável.

HIDE_PROP_ICUBINARY_DATA_PATH

ID da mudança:171979766
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, remove o acesso à propriedade android.icu.impl.ICUBinary.dataPath.

IGNORE_ALLOW_BACKUP_IN_D2D

ID da mudança:183147249
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, a propriedade android:allowBackup é ignorada em apps durante migrações entre dispositivos (D2D).

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

ID da mudança:180523564
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, as regras de inclusão e exclusão especificadas usando android:fullBackupContent são ignoradas durante as transferências entre dispositivos (D2D).

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

ID da mudança:169273070
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (API de nível 31) ou mais recentes, agora o método getSupportedLocales() retorna uma lista de localidades vazia quando uma não estiver definida, em vez da localidade padrão do sistema.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

ID da mudança:158482162
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, a permissão BACKUP necessária para o método isBackupServiceActive() é aplicada no lado do serviço, e não no lado do cliente para o BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

ID da mudança:169897160
Estado padrão: desativada para todos os apps.

Quando ativada, a criação da operação de keystore pode falhar de acordo com a nova estratégia de remoção. O Keystore costumava funcionar com o pressuposto de que a criação de operações criptográficas sempre é bem-sucedida. No entanto, o back-end do KeyMint tem apenas um número limitado de slots de operação.

Para manter a aparência de slots de operação "infinitos", o daemon do Keystore remove as operações menos usadas recentemente se não houvesse um slot de operação disponível. Como resultado, boas operações podem ser encerradas prematuramente. Isso abriu o AndroidKeystore para negação de serviço (DoS) e livelocks não intencionais. Por exemplo, se vários apps despertaram ao mesmo tempo devido a otimizações de gerenciamento de energia e tentaram executar operações de criptografia, eles começarão a encerrar as operações um do outro sem progredir.

Para romper os livelocks e desencorajar tentativas de DoS, mudamos a estratégia de remoção para que os clientes usem poucos slots de operação rapidamente. Como resultado, operações únicas que não ficam inativas por mais de 5 segundos quase sempre serão concluídas sem interrupções pela estratégia de remoção. Ainda há algumas operações relacionadas à criptografia do sistema de arquivos que podem remover até mesmo essas operações, mas esses casos são extremamente raros. Como efeito colateral dessa nova estratégia de remoção, a criação poderá falhar se o cliente tiver um poder de remoção menor do que todas as operações existentes.

Estratégia de remoção: para encontrar um candidato adequado, calculamos o malus do autor da chamada e de cada operação existente. O malus é o inverso do poder de remoção (autor da chamada) ou da resistência à remoção (operação atual). Para que o autor da chamada possa remover uma operação, ele precisa encontrar uma operação com malus maior que o dele. Para mais detalhes sobre a estratégia de remoção, consulte a implementação de operation.rs. No Android 11 (API de nível 30) e versões anteriores, o KeyStore2 procura um slot de operação livre no daemon do Keystore. Para apps destinados ao Android 11 (nível 30 da API) e versões anteriores, ainda vai parecer que a inicialização de objetos de criptografia e assinatura sempre funciona. No entanto, pode levar mais tempo para realizar uma operação. Todas as versões do Android se beneficiam da programação de slots mais justa e de ter uma chance melhor de concluir uma operação.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

ID da mudança:174664365
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, não é possível enviar Intent.ACTION_CLOSE_SYSTEM_DIALOGS, a menos que o app também tenha a permissão android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. Essa é a versão mais restritiva de #DROP_CLOSE_SYSTEM_DIALOGS que espera que o app pare de enviar a intent Intent.ACTION_CLOSE_SYSTEM_DIALOGS quando o app for iniciado no Android 12 (nível 31 da API) ou mais recente.

LOCK_DOWN_COLLAPSE_STATUS_BAR

ID da mudança:173031413
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, a permissão Manifest.permission.STATUS_BAR é necessária para recolher os painéis da barra de status por motivos de segurança. Isso estava sendo explorado por malwares para impedir o usuário de acessar notificações críticas.

LOW_POWER_EXCEPTIONS

ID da mudança:168936375
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps direcionados ao Android 12 (nível 31 da API) e mais recentes, todos os objetos LocationRequest marcados como de baixo custo de bateria geram exceções caso o autor da chamada não tenha a permissão LOCATION_HARDWARE, em vez de descartar silenciosamente a parte de baixo custo da solicitação.

MISSING_EXPORTED_FLAG

ID da mudança:150232615
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, é necessário especificar um valor explícito para o atributo android:exported sempre que um filtro de intent for definido.

Para saber mais sobre essa mudança, consulte Exportação mais segura de componentes.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

ID da mudança:207557677
Estado padrão: ativada para apps destinados ao Android 12 (nível 32 da API) ou versões mais recentes.

Para apps direcionados ao Android 12 (nível 32 da API) e versões mais recentes, as alocações de heap nativas no processo AppZygote e nos descendentes usam uma tag diferente de zero no byte mais significativo.

Para saber mais sobre essa mudança, consulte Ponteiros com tag.

NATIVE_HEAP_ZERO_INIT

ID da mudança:178038272
Estado padrão: desativada para todos os apps.

Ative a inicialização em zero automática para alocações de memória de heap nativas.

NATIVE_MEMTAG_ASYNC

ID da mudança:135772972
Estado padrão: desativada para todos os apps.

Ative a verificação assíncrona (ASYNC) de tags de memória nesse processo. Essa sinalização afeta apenas o hardware com suporte à extensão ARM Memory Tagging Extension (MTE).

NATIVE_MEMTAG_SYNC

ID da mudança:177438394
Estado padrão: desativada para todos os apps.

Ativa a verificação síncrona (SYNC) de tags de memória nesse processo. Essa sinalização afeta apenas o hardware compatível com a extensão ARM Memory Tagging Extension (MTE). Se NATIVE_MEMTAG_ASYNC e essa opção estiverem ativadas, essa opção terá preferência e a MTE será ativada no modo SYNC.

NEVER_SANDBOX_DISPLAY_APIS

ID da mudança:184838306
Estado padrão: desativada para todos os apps.

Quando ativada, impede que o sandbox da API Display seja aplicado a uma atividade com efeito letterbox ou SCM. As APIs Display vão continuar a fornecer limites de DisplayArea.

Para saber mais sobre essa mudança, consulte a seção na página Mudanças de comportamento do Android 12 sobre Métodos de exibição que foram descontinuados.

NOTIFICATION_CANCELLATION_REASONS

ID da mudança:175319604
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Possibilita que listeners de notificação entendam motivos novos mais específicos de cancelamento.

NOTIFICATION_TRAMPOLINE_BLOCK

ID da mudança:167676448
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para melhorar o desempenho e a UX do app, os apps direcionados ao Android 12 não podem usar serviços nem broadcast receivers como notificações em trampolim.

Para saber mais sobre essa mudança, consulte Notificações em trampolim não podem ser criadas em serviços ou broadcast receivers.

NULL_TELEPHONY_THROW_NO_CB

ID da mudança:182185642
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Usada para verificar se a versão do SDK de destino do processo atual é o Android 12 (nível 31 da API) ou mais recente.

Ela se aplica aos métodos a seguir:

OVERRIDE_MIN_ASPECT_RATIO

ID da mudança:174042980
Estado padrão: desativada para todos os apps.

Essa mudança é a responsável por todas as mudanças que forçam uma determinada proporção mínima. A ativação dela possibilita que as proporções mínimas a seguir sejam aplicadas:

Quando essa mudança é ativada para um pacote de apps, a proporção mínima fornecida no manifesto do app é substituída pela maior proporção ativada, a menos que o valor do manifesto seja maior.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

ID da mudança:180326787
Estado padrão: desativada para todos os apps.

Quando OVERRIDE_MIN_ASPECT_RATIO também estiver ativado, ativar essa mudança para um pacote vai definir a proporção mínima da atividade como um valor alto, conforme definido por OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

ID da mudança:180326845
Estado padrão: desativada para todos os apps.

Quando OVERRIDE_MIN_ASPECT_RATIO também estiver ativado, ativar essa mudança para um pacote definirá a proporção mínima da atividade como um valor médio, conforme definido por OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

ID da mudança:160794467
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, é necessário especificar a mutabilidade de cada objeto PendingIntent criado pelo app. Esse novo requisito melhora a segurança do app.

Para saber mais sobre essa mudança, consulte Intents pendentes precisam declarar mutabilidade.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

ID da mudança:165573442
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Apps de administrador destinados ao Android 12 (nível 31 da API) e mais recentes não podem usar DevicePolicyManager.setPasswordQuality(ComponentName, int) para definir a qualidade da senha na instância DevicePolicyManager recebida ao chamar DevicePolicyManager.getParentProfileInstance(ComponentName). Em vez disso, eles precisam usar DevicePolicyManager.setRequiredPasswordComplexity(int) para definir requisitos de senha abrangentes em todo o dispositivo.

RATE_LIMIT_TOASTS

ID da mudança:174840628
Estado padrão: essa mudança não pode ser alternada. Ela só é registrada pelo framework de compatibilidade.

Ativa a limitação de taxa para o número de chamadas Toast.show() para evitar sobrecarregar o usuário com muitos avisos em um tempo limitado. Qualquer tentativa de mostrar mais avisos do que o permitido em um determinado período faz com que o aviso seja descartado.

REQUIRE_EXACT_ALARM_PERMISSION

ID da mudança:171306433
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, os apps precisam ter a permissão Manifest.permission.SCHEDULE_EXACT_ALARM para usar qualquer API e definir alarmes exatos, como setExactAndAllowWhileIdle(int, long, PendingIntent) e setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

ID da mudança:182478738
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, os apps precisam ter a permissão Manifest.permission.READ_PHONE_STATE para chamar TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

ID da mudança:184323934
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, os apps precisam ter a permissão Manifest.permission.READ_PHONE_STATE para chamar TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

ID da mudança:183164979
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, os apps precisam ter a permissão Manifest.permission.READ_PHONE_STATE para chamar TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

ID da mudança:171032338
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps direcionados ao Android 12 (nível 31 da API) ou mais recentes, o adb backup é ativado automaticamente para apps executados como depuráveis, com o atributo android:debuggable definido como true (verdadeiro), e indisponíveis para outros apps.

RESTRICT_DOMAINS

ID da mudança:175408749
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, é necessário ter a forma atualizada da API de verificação de links de apps. Esse requisito significa que um app precisa declarar domínios em um filtro de intent que inclua todos os itens abaixo:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Somente IntentFilter.SCHEME_HTTP e/ou IntentFilter.SCHEME_HTTPS, sem outros esquemas

Em versões anteriores do Android, Intent.CATEGORY_BROWSABLE não era um requisito, outros esquemas eram permitidos e a definição de autoVerify como true (verdadeiro) em qualquer filtro de intent fingiria implicitamente que todos os filtros de intent estavam definidos como autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

ID da mudança:151105954
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Para apps direcionados ao Android 12 (nível 31 da API) e mais recentes, impõe que todas as attributionTags enviadas aos métodos noteOp(String, int, String), noteProxyOp(String, String), e startOp(String, int, String), sejam definidas no manifesto do pacote que é especificado como um parâmetro dos métodos.

Para que essa mudança funcione, é necessário a ativar tanto no pacote que chama noteOp(String, int, String) quanto no pacote especificado como parâmetro do método.

SELINUX_LATEST_CHANGES

ID da mudança:143539591
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps destinados ao Android 12 (nível 31 da API) e mais recentes, ativa as mudanças mais recentes do SELinux. A desativação dessa mudança para apps destinados ao Android 12 (nível 31 da API) ou mais recentes é automática e não tem efeito nenhum para apps que usam um ID de usuário compartilhado.

SETTINGS_API_V2

ID da mudança:178111421
Estado padrão: ativada para todos os apps.

A nova API de preferências de usuário para verificar domínios marcados como autoVerify=true nos filtros de intent do AndroidManifest.xml ainda não foi implementada na prévia atual da plataforma. Por enquanto, é possível visualizar as mudanças nas novas preferências de usuários ativando esse ChangeId e usando os comandos adb shell pm set-app-links-user-selection e semelhantes.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

ID da mudança:183972877
Estado padrão: ativada para apps destinados ao Android 12 (nível 31 da API) ou mais recentes.

Em apps direcionados ao Android 12 (nível 31 da API) e mais recentes, determina se é necessário usar um tempo limite menor antes de elevar o bucket em espera para ACTIVE (ativo) quando os apps iniciam um serviço em primeiro plano.