Esta é a prévia para desenvolvedores do Android 13. Envie seu feedback e ajude a deixar o Android 13 ainda melhor.

Mudanças no framework de compatibilidade (Android 13)

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

Esta página descreve as mudanças alternáveis que fazem parte do framework de compatibilidade do Android 13. Use esta lista em conjunto com as opções do desenvolvedor e os comandos ADB para testar e depurar seu app enquanto você se prepara para oferecer suporte e direcionar ao Android 13.

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

A lista nesta seção descreve mudanças alternáveis incluídas no framework de compatibilidade do Android 13.

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

Mudanças alternáveis no framework de compatibilidade do Android 13

ALWAYS_SANDBOX_DISPLAY_APIS

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

Força os pacotes em que é aplicada a sempre ter o sandbox da API Display aplicado, independente do modo de janelas. As APIs Display sempre fornecerão os limites do app.

Para saber mais sobre essa mudança, consulte Display#getRealSize e getRealMetrics: descontinuação e sandbox.

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.

DEFER_BOOT_COMPLETED_BROADCAST_CHANGE_ID

ID da mudança: 203704822
Estado padrão: ativada para apps destinados ao Android 13 ou versões mais recentes.

Para apps destinados ao Android 13 e versões mais recentes, adie as transmissões LOCKED_BOOT_COMPLETED e BOOT_COMPLETED até que um processo seja iniciado no UID pela primeira vez.

DOWNSCALED

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

Essa mudança é a responsável por todas as alterações de redução de escalonamento por buffer em cada app. Desativar essa mudança impede o funcionamento dos fatores de escalonamento a seguir:

Quando essa mudança estiver ativada para um pacote de apps, o app será forçado a ser redimensionado para o fator de escalonamento mais alto ativado. Por exemplo, 80% será usado se 80% e 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 DOWNSCALED também estiver ativado, ativar essa mudança para um pacote vai forçar o app a presumir que ele será executado em uma tela com 90% de resolução vertical e horizontal da tela real.

DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED

ID da mudança: 161145287
Estado padrão: ativada para apps destinados ao Android 13 ou versões mais recentes.

Para apps destinados ao Android 13 e versões mais recentes, agora é necessário definir explicitamente Context.RECEIVER_EXPORTED ou Context.RECEIVER_NOT_EXPORTED ao registrar um receptor para uma transmissão desprotegida no código.

Para saber mais sobre essa mudança, consulte a seção Exportar receptores registrados pelo contexto de forma mais segura.

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 os recursos de mídia compatíveis no manifesto, mas essa sinalização pode ser usada para forçar um app a não ser compatível com HEVC, forçando a transcodificação ao acessar mídias codificadas em HEVC. Definir essa sinalização modificará todos os padrões no nível do SO do app. Esse recurso fica desativado por padrão, o que significa que os padrões do SO têm prioridade. Definir essa sinalização e FORCE_ENABLE_HEVC_SUPPORT indica um estado indefinido e fará com que o SO ignore as duas sinalizações.

FORCE_ENABLE_HEVC_SUPPORT

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

Força o app a ser compatível com o recurso de mídia HEVC. Os apps precisam declarar os recursos de mídia compatíveis no manifesto. mas essa sinalização pode ser usada para forçar um app a ser compatível com HEVC, evitando a transcodificação ao acessar mídias codificadas em HEVC. Definir essa sinalização modificará todos os padrões no nível do SO do app. Esse recurso fica desativado por padrão, o que significa que os padrões do SO têm prioridade. Definir essa sinalização e FORCE_DISABLE_HEVC_SUPPORT indica um estado indefinido e fará com que o SO ignore 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ó é permitido redimensionar janelas no modo de tela cheia. Não é possível forçar o app a entrar no modo de várias janelas redimensionáveis.

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 funcionava com base no pressuposto de que a criação de operações criptográficas sempre ocorria corretamente. No entanto, o back-end KeyMint tem um número limitado de slots de operação.

Para que o número de slots de operação parecessem ser "infinitos", o daemon do Keystore removia as operações menos usadas recentemente caso não houvesse um slot de operação disponível. Como resultado, boas operações podiam ser encerradas de forma prematura. Isso abriu o AndroidKeystore para negação de serviço (DoS) e livelocks indesejados. Por exemplo, caso vários apps fossem ativados ao mesmo tempo devido a otimizações de gerenciamento de energia e tentassem executar operações de criptografia, eles passariam a encerrar as operações uns dos outros, sem fazer nenhum progresso.

Para eliminar os livelocks e desestimular as tentativas de DoS, mudamos a estratégia de remoção, de forma que os clientes que usam poucos slots de operação de forma breve têm preferência. Consequentemente, operações únicas que não ficam inativas por mais de cinco segundos quase sempre são concluídas sem interrupções pela estratégia de remoção. Ainda existem 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 pode apresentar falha 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, computamos 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 do que o seu. Para ver 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 direcionados ao Android 11 (API de nível 30) e versões anteriores, ainda parecerá que a inicialização de objetos de criptografia e assinatura sempre funciona. No entanto, pode levar mais tempo para realizar a 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.

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.

Força os pacotes aos quais ela é aplicada a nunca aplicar o sandbox da API Display para uma atividade com efeito letterbox ou SCM. As APIs Display continuarão a fornecer limites DisplayArea.

Para saber mais sobre essa mudança, consulte Display#getRealSize e getRealMetrics: descontinuação e sandbox.

NOTIFICATION_LOG_ASSISTANT_CANCEL

ID da mudança: 195579280
Estado padrão: ativada para apps destinados ao Android 13 ou versões mais recentes.

Para apps destinados ao Android 13 e versões mais recentes, permite que os listeners entendam o motivo mais específico para cancelamentos de notificações de um assistente, em vez de usar o REASON_LISTENER_CANCEL mais geral.

NOTIFICATION_PERM_CHANGE_ID

ID da mudança: 194833441
Estado padrão: ativada para apps destinados ao Android 13 ou versões mais recentes.

Para apps destinados ao Android 13 e versões mais recentes, ativa mudanças de comportamento relacionadas a notificações ou permissões de execução.

Para saber mais sobre essa mudança, consulte a página sobre a nova permissão de execução para notificações.

OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK

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

Quando ativada, esse ID de mudança força os pacotes aplicados a ignorar o valor atual de android:resizeableActivity, bem como o SDK de destino igual ou menor que M e considerar a atividade como não redimensionável. Nesse caso, o valor de rotação e corte da câmera vai depender apenas da compensação necessária, considerando a rotação atual da tela.

OVERRIDE_CAMERA_ROTATE_AND_CROP_DEFAULTS

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

Quando ativada, esse ID de mudança força os pacotes aplicados a modificar o comportamento padrão de rotação e corte da câmera e sempre retornar CaptureRequest.SCALER_ROTATE_AND_CROP_NONE. O comportamento padrão e todas as combinações de substituição possíveis são discutidos na tabela abaixo.

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 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 vai definir a proporção mínima da atividade como um valor médio, conforme definido por OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

Quando o OVERRIDE_MIN_ASPECT_RATIO também estiver ativado, a ativação dessa mudança para um pacote limita outras mudanças que forçam a proporção mínima de uma atividade a um determinado valor, como OVERRIDE_MIN_ASPECT_RATIO_LARGE e OVERRIDE_MIN_ASPECT_RATIO_MEDIUM, para atividades que também têm orientação de retrato.

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(), a fim de evitar sobrecarregar o usuário com muitos avisos em um período limitado. Qualquer tentativa de mostrar mais avisos do que o permitido em um período determinado vai fazer com que o aviso seja descartado.

SUPPORT_DEREGISTERING_LOSING_PDN_STATE

ID da mudança: 201522903
Estado padrão: ativada para apps destinados ao Android 13 ou versões mais recentes.

Para apps direcionados ao Android 13 e versões mais recentes, oferece suporte ao estado DEREGISTERING_REASON_LOSING_PDN nas APIs, como DelegateRegistrationState#addDeregisteringFeatureTag e DelegateRegistrationState#getDeregisteringFeatureTags.

SUPPORT_PUBLISHING_STATE

ID da mudança: 202894742
Estado padrão: ativada para apps destinados ao Android 13 ou versões mais recentes.

Para apps direcionados ao Android 13 e versões mais recentes, oferece suporte ao estado de publicação em APIs, como RcsUceAdapter#PUBLISH_STATE_PUBLISHINGsupport.

SUPPORT_REGISTERING_DELEGATE_STATE

ID da mudança: 205194548
Estado padrão: ativada para apps destinados ao Android 13 ou versões mais recentes.

Para apps direcionados ao Android 13 e versões mais recentes, oferece suporte ao estado REGISTERING em APIs, como DelegateRegistrationState#addRegisteringFeatureTags e DelegateRegistrationState#getRegisteringFeatureTagssupport.