Visão geral de recursos e APIs

O Android 13 introduz ótimos recursos e APIs novos para desenvolvedores. As seções abaixo ajudam você a conhecer os recursos dos apps e a começar a usar as APIs relacionadas.

Para uma lista detalhada das APIs novas, modificadas e removidas, leia o Relatório de diferenças da API. Para ver detalhes sobre as novas APIs, acesse a Referência da API do Android. As APIs novas estão em destaque para melhor visibilidade. Além disso, para saber mais sobre as áreas em que as mudanças na plataforma podem afetar seus apps, consulte as mudanças de comportamento do Android 13 para apps destinados ao Android 13 e para todos os apps.

Produtividade e ferramentas para desenvolvedores

Ícones de app com tema

Usuário ativando ícones de app com tema
Ativação de ícones de app com tema no Android 13

No Android 13 e versões mais recentes, é possível ativar ícones de app com tema. Com esse recurso, os ícones dos apps em telas de início com suporte do Android herdam a tonalidade da cor do plano de fundo escolhido e de outros temas.

Para oferecer suporte a esse recurso, o app precisa fornecer um ícone adaptativo e um ícone monocromático, bem como apontar para o ícone monocromático do elemento <adaptive-icon> no manifesto. Caso o usuário tenha ativado a opção Ícones com tema nas configurações do sistema e a tela de início ofereça suporte a esse recurso, o sistema usa a cor do plano de fundo e o tema escolhidos pelo usuário para determinar a cor da tonalidade a ser aplicada ao ícone monocromático do app.

Em qualquer um dos casos a seguir, a tela inicial NÃO mostra o ícone do app com tema, mas sim o ícone adaptativo ou padrão:

  • Se o usuário não tiver ativado a opção de ícones com tema.
  • Se o app não tiver um ícone monocromático.
  • Se a tela de início não oferecer suporte para ícones de apps com tema.

Para mais detalhes e instruções, consulte Ícones adaptativos.

Preferências de idioma por app

Idiomas separados por app nas configurações do sistema

Em muitos casos, os usuários multilíngues definem um idioma para o sistema, como o inglês, mas querem selecionar outros idiomas para apps específicos, como holandês, chinês ou hindi. Para melhorar a experiência dos usuários nos apps que oferecem suporte a vários idiomas, o Android 13 introduz os recursos abaixo:

  • Configurações do sistema: um local centralizado em que os usuários podem selecionar um idioma preferido para cada app.

    Para informar ao sistema que ele oferece suporte para vários idiomas, o app precisa declarar o atributo android:localeConfig no manifesto. Para saber mais, consulte as instruções sobre como criar um arquivo de recursos e o declarar no arquivo de manifesto do app.

  • Outras APIs: essas APIs públicas, como os métodos setApplicationLocales() e getApplicationLocales() em LocaleManager, permitem que os apps definam um idioma diferente daquele usado pelo sistema no momento da execução.

    Essas APIs são sincronizadas automaticamente com as configurações do sistema. Os apps que usam essas APIs para criar seletores de idioma personalizados garantem que os usuários tenham uma experiência consistente, independente do local em que escolherem as preferências de idioma. As APIs públicas também ajudam a reduzir o código boilerplate e oferecem suporte para APKs divididos e para Backup automático de apps, permitindo que os aplicativos armazenem as configurações de idioma do usuário.

    Para oferecer compatibilidade com versões anteriores do Android, APIs equivalentes também estão disponíveis no AndroidX. Recomendamos o uso das APIs adicionadas na Appcompat 1.6.0-beta01 ou versões mais recentes.

Essas mudanças não afetam os apps que não oferecem suporte a vários idiomas.

Melhoria no suporte de texto e idioma

O Android 13 inclui vários recursos de melhorias de texto e idioma para oferecer uma experiência mais refinada descrita nas seções abaixo:

Hifenização mais rápida

A hifenização facilita a leitura de texto agrupado e ajuda a tornar a IU mais adaptativa. No Android 13 e versões mais recentes, a performance da hifenização é otimizada em até 200% para que você possa a ativar na TextView sem afetar a performance da renderização. Para permitir uma hifenização mais rápida, use as frequências fullFast ou normalFast em setHyphenationFrequency().

APIs Text Conversion

Falantes de idiomas como o japonês e o chinês usam métodos de entrada com alfabeto fonético, que geralmente reduzem a velocidade da pesquisa e de recursos como o preenchimento automático. No Android 13, os apps podem chamar a nova API Text Conversion para que os usuários consigam encontrar o que procuram com mais rapidez e facilidade. Antes, para fazer uma pesquisa, um usuário falante de japonês precisava seguir estas etapas:

  1. Inserir o hiragana com a pronúncia fonética do termo de pesquisa, como um lugar ou o nome de um app.
  2. Usar o teclado para converter os caracteres hiragana em kanji.
  3. Pesquisar novamente usando os caracteres kanji.
  4. Finalmente, ver os resultados da pesquisa.

Com a nova API de conversão de texto, os usuários falantes de japonês podem digitar em hiragana e receber imediatamente os resultados da pesquisa em kanji, pulando as etapas 2 e 3.

Melhorias na altura de linhas para textos em idiomas não latinos

O Android 13 melhora a exibição de textos em idiomas não latinos, como tâmil, birmanês, télugo e tibetano, usando uma altura de linha adaptada a cada idioma. As alturas das novas linhas evitam cortes e melhoram o posicionamento dos caracteres. Para aproveitar essas melhorias, basta destinar o app ao Android 13. É importante fazer testes no app ao usar o novo espaçamento entre linhas, porque as mudanças podem afetar a IU em idiomas não latinos.

Alturas de linha cortadas no Android 12 (acima) e que agora ficam melhor posicionadas e não são cortadas no Android 13 (abaixo).

Melhoria no ajuste de texto em japonês

No Android 13 e versões mais recentes, as TextViews podem ajustar o texto com base no bunsetsu (menor unidade sonora significativa) ou em frases, e não por caractere. Dessa forma, é possível proporcionar aplicativos mais elaborados e mais legíveis em japonês. Para aproveitar esse recurso, use android:lineBreakWordStyle="phrase" com as TextViews.

Ajuste de texto em japonês com base em frases ativado (abaixo) e desativado (acima).

Atualizações da biblioteca Unicode

O Android 13 adiciona as melhorias, correções e mudanças mais recentes incluídas em Unicode ICU 70, Unicode CLDR 40 e Unicode 14.0 (links em inglês).

Veja algumas mudanças importantes:

  • O inglês en‑CA (Canadá) e o inglês en‑PH (República das Filipinas) usam recursos de tradução do inglês en (Estados Unidos) quando não há recursos de tradução disponíveis, em vez de usar o inglês en‑GB (Reino Unido).
  • A categoria plural many foi introduzida para os idiomas espanhol es, italiano it, português pt e português pt‑PT (Portugal). De forma parecida com o francês introduzido no CLDR v38 (link em inglês), ela é usada para grandes números.

Fontes vetoriais coloridas

Emoji vetorial em COLRv1 (à esquerda) e emoji em bitmap (à direita)

No Android 13 e versões mais recentes, o sistema inclui suporte à renderização de fontes COLRv1 e atualiza os emojis do sistema para o formato COLRv1. COLRv1 é um formato de fonte altamente compacto que é renderizado de forma rápida e nítida em qualquer tamanho.

Na maioria dos apps, o sistema processa tudo e o COLRv1 funciona normalmente. No entanto, caso o app implemente uma renderização de texto própria e use as fontes do sistema, recomendamos testar a renderização de emojis.

Para saber mais sobre o COLRv1, consulte os recursos abaixo:

API de posicionamento para Configurações rápidas

As Configurações rápidas na aba de notificações são uma maneira conveniente para o usuário mudar configurações ou realizar ações rápidas sem sair do contexto de um app. Deixamos mais fácil encontrar e adicionar apps que fornecem blocos personalizados às Configurações rápidas. Usando uma nova API de posicionamento de bloco, o app agora pode solicitar que o usuário adicione diretamente um bloco personalizado ao conjunto de blocos ativos de Configurações rápidas. Em vez de precisar acessar as Configurações rápidas para adicionar o bloco, uma nova caixa de diálogo do sistema permite que ele o adicione em uma única etapa, sem sair do app.

Uma caixa de diálogo perguntando se o usuário quer adicionar um bloco às
          Configurações rápidas.

Visualização da área de transferência

No Android 13 e versões mais recentes, o sistema mostra uma confirmação visual padrão ao adicionar conteúdo à área de transferência. A nova confirmação faz o seguinte:

  • Confirma que o conteúdo foi copiado.
  • Oferece uma visualização do conteúdo copiado.

Esse recurso padroniza as várias notificações exibidas pelos apps após copiar um conteúdo e oferece aos usuários mais controle sobre a área de transferência. Para mais informações, acesse a página do recurso copiar e colar.

Widget do recurso copiar e colar
Nova IU exibida quando o conteúdo é inserido na área de transferência.

Gesto "Voltar" preditivo

O Android 13 introduz um gesto de volta preditivo para os dispositivos Android, como smartphones, telas grandes e dobráveis. Para que haja suporte a esse recurso, é necessário atualizar o app.

Para ver a documentação detalhada, consulte Atualizar o app para oferecer suporte ao gesto "Voltar" preditivo. Você também pode consultar nosso codelab.

Áudio bluetooth de baixa energia

O áudio de baixa energia (LE Audio) é um áudio sem fio criado para substituir o Bluetooth clássico e permitir determinados casos de uso e topologias de conexão. Ele permite que os usuários compartilhem e transmitam áudio a amigos e familiares ou que participem de transmissões públicas para ter acesso a informações, entretenimento ou recursos de acessibilidade. Esse formato foi projetado para garantir que os usuários recebam áudio de alta fidelidade sem sacrificar a duração da bateria e possam alternar facilmente entre diferentes casos de uso que não são possíveis com o Bluetooth clássico. No Android 13 e versões mais recentes, o sistema inclui suporte integrado ao áudio de baixo consumo. Portanto, os desenvolvedores recebem esses recursos sem custos financeiros em dispositivos compatíveis.

MIDI 2.0

No Android 13 e versões mais recentes, o sistema inclui suporte ao padrão MIDI 2.0, incluindo a capacidade de conectar hardware MIDI 2.0 por USB. Esse padrão oferece recursos como maior resolução para controladores, melhor suporte para entonação não ocidental e desempenho mais expressivo usando controladores por nota.

Melhorias na eficiência da tela de apresentação

O Android 13 melhora a eficiência das telas de apresentação animadas na API Splash Screen:

  • O sistema infere a duração da animação diretamente da AnimatedVectorDrawable. Em versões anteriores ao Android 13, era necessário definir a windowSplashScreenAnimationDuration diretamente.

  • Use o novo atributo windowSplashScreenBehavior para controlar se o app sempre vai mostrar o ícone na tela de apresentação no Android 13 e versões mais recentes.

Para conferir a documentação detalhada, consulte Telas de apresentação.

Otimizações de ART

No Android 13 (nível 33 da API) e versões mais recentes, o ART agiliza muito a mudança de e para o código nativo, com chamadas JNI até 2,5 vezes mais rápidas. O processamento de referências do ambiente de execução também foi reformulado para torná-lo praticamente sem bloqueio, o que reduz ainda mais a instabilidade. Além disso, é possível usar a API pública Reference.refersTo() para recuperar objetos inacessíveis mais cedo. Você vai notar que o intérprete agora está mais rápido graças às pesquisas otimizadas de classe e método. O ART também realiza mais verificação de códigos de bytes no momento da instalação, evitando o gasto com verificação no momento da execução e mantendo os tempos de inicialização do app rápidos.

Privacidade e segurança

Exportação mais segura de receptores registrados por contexto

Para ajudar a tornar os receptores de execução mais seguros, o Android 13 introduz a capacidade do app especificar se um broadcast receiver registrado precisa ser exportado e ficar visível para outros apps no dispositivo. Em versões anteriores do Android, qualquer app no dispositivo poderia enviar uma transmissão desprotegida para um receptor registrado dinamicamente, a menos que ele estivesse protegido por uma permissão de assinatura.

Essa configuração de exportação está disponível em aplicativos que realizam pelo menos uma das seguintes ações:

Seletor de fotos

O Android 13 (nível 33 da API) e versões mais recentes inclui uma melhor experiência do seletor de fotos. Quando o app inicia o seletor de fotos, os usuários selecionam imagens e vídeos específicos para compartilhar, como fotos do perfil, em vez de conceder acesso a ele para acessar toda a biblioteca de mídia. Essa é a maneira recomendada de acessar as fotos e os vídeos do usuário.

O seletor de fotos oferece melhor privacidade aos usuários porque o app não precisa declarar nenhuma permissão de execução. Além disso, ele fornece uma IU integrada e padronizada para apps, o que cria uma experiência do usuário mais consistente.

Nova permissão de execução para dispositivos Wi-Fi por perto

O Android 13 (nível 33 da API) introduz uma nova permissão de execução no grupo de permissões NEARBY_DEVICES para apps que gerenciam as conexões de um dispositivo aos pontos de acesso Wi-Fi por perto. Esses apps precisam declarar a nova permissão, NEARBY_WIFI_DEVICES, quando chamam várias APIs Wi-Fi. Além disso, contanto que os apps não determinem a localização física das APIs de Wi-Fi, eles não precisam declarar a permissão ACCESS_FINE_LOCATION quando são direcionados ao Android 13 ou versões mais recentes.

Saiba mais sobre a permissão para dispositivos Wi-Fi por perto.

Nova permissão para usar alarmes exatos

Se o app for destinado ao Android 13 ou versões mais recentes, use a permissão USE_EXACT_ALARM, que é concedida automaticamente ao app. No entanto, para que seu app possa usar essa permissão, ele precisa ser:

  • Um app de despertador ou timer.
  • Um app de agenda que mostra notificações dos próximos eventos.

Caso seu app use alarmes exatos, mas não corresponda a nenhum dos casos apresentados acima, continue declarando a permissão SCHEDULE_EXACT_ALARM, ciente de que o usuário poderá decidir negar acesso ao app.

Permissões que podem ser removidas pelo desenvolvedor

No Android 13 e versões mais recentes, o app pode revogar o acesso a permissões de execução não usadas. Essa API permite que o app execute tarefas que aumentam a privacidade do usuário, como:

  • Remover as permissões não utilizadas.
  • Seguir as práticas recomendadas de permissões, aumentando a confiança dos usuários. É recomendável mostrar aos usuários uma caixa de diálogo que apresente as permissões que o app revogou proativamente.

Esquema de assinatura de APK v3.1

O Android 13 inclui suporte ao esquema de assinatura de APK v3.1, que apresenta melhorias em relação ao esquema de assinatura de APK v3. Esse esquema aborda alguns dos problemas conhecidos com o Esquema de assinatura do APK v3 relacionados à rotação. Em particular, o esquema de assinatura v3.1 oferece suporte à segmentação de versões do SDK, o que permite que a rotação seja destinada a uma versão mais recente da plataforma.

O esquema de assinatura v3.1 usa um novo ID de bloco, que não é reconhecido no 12L ou versões anteriores. Portanto, a plataforma aplica este comportamento de signatário:

  • Dispositivos com o Android 13 ou versões mais recentes usam o signatário alternado no bloco v3.1.
  • Dispositivos com versões mais antigas do Android ignoram o signatário alternado e, em vez disso, usam o signatário original no bloco v3.0.

Em apps que ainda não alternaram a chave de assinatura, nenhuma outra ação é necessária. Quando esses apps optarem por alternar, o sistema vai aplicar o novo esquema de assinatura v3.1 por padrão.

Apps que já foram alternados e querem continuar a usar a chave de assinatura alternada no bloco de assinatura v3.0 precisam atualizar a invocação do apksigner:

apksigner sign --ks keystore.jks |
  --key key.pk8 --cert cert.x509.pem
  --rotation-min-sdk-version API_LEVEL
  [signer_options] app-name.apk

... em que o API_LEVEL é 32 ou menos.

Geração de relatórios de erros aprimorada no Keystore e no KeyMint

Para apps que geram chaves, o Keystore e o KeyMint agora oferecem indicadores de erros mais detalhados e precisos. Adicionamos uma hierarquia de classe de exceção em java.security.ProviderException, com exceções específicas para o Android que incluem códigos de erro do Keystore/KeyMint e informam se o erro pode ser repetido. Também é possível modificar os métodos de geração de chaves e usar assinatura ou criptografia para gerar essas novas exceções. Os relatórios de erros aprimorados não se limitam à geração de chaves. Com esse recurso, você terá o necessário para tentar gerar chaves novamente.

Suporte para tablets e telas grandes

O Android 13 foi desenvolvido com base nas otimizações para tablets introduzidas no Android 12 e na atualização de recursos do 12L, incluindo otimizações para a IU do sistema e melhorias ao trabalhar em várias tarefas ao mesmo tempo e nos modos de compatibilidade. Como parte do processo de testes, confira se o app é exibido corretamente em tablets e outros dispositivos de tela grande.

Para saber mais sobre as novidades e o que é necessário testar, consulte a página Suporte para tablets e telas grandes.

Gráficos

Sombreadores programáveis

Um sombreador animado AGSL, adaptado deste sombreador GLSL.

No Android 13 e versões mais recentes, o sistema inclui suporte para objetos RuntimeShader programáveis, com comportamento definido pela Linguagem de sombreamento gráfico do Android (AGSL). A AGSL compartilha grande parte da sintaxe com a GLSL, mas funciona no mecanismo de renderização do Android para personalizar a exibição da tela do Android, além de filtrar o conteúdo da visualização. O Android usa esses sombreadores internamente para implementar efeitos de ondulação, desfoque e rolagem esticada. O Android 13 e versões mais recentes permite que você crie efeitos avançados parecidos para o app.

Melhorias para Choreographer

O Android 13 introduz métodos da API pública para Choreographer e ASurfaceControl, que fornecem apps com mais informações sobre os possíveis cronogramas de frames e adicionam mais contexto a SurfaceFlinger sobre o ciclo de vida do frame. Assim como antes, os apps podem postar um callback para Choreographer e receber informações do cronograma de frames. No Android 13 (API de nível 33), Choreographer retorna vários tempos de apresentação possíveis e os prazos de frame correspondentes. Os apps podem escolher o horário da apresentação e, consequentemente, notificar SurfaceFlinger da escolha. O SurfaceFlinger não tenta aplicar transações nem armazenar buffers antes do tempo de apresentação desejado.

Se o app usa os novos métodos Choreographer e SurfaceControl, é possível visualizar o ciclo de vida do frame do app em um trace do Perfetto.

Câmera

Captura de vídeo HDR

No Android 13 e versões mais recentes, as APIs Camera2 oferecem suporte à captura de vídeo High Dynamic Range (HDR), o que permite visualizar e gravar conteúdo de vídeo em HDR usando a câmera. Em comparação com o intervalo dinâmico padrão (SDR), o HDR oferece uma variedade maior de cores e aumenta o intervalo dinâmico do componente de luminância (dos 100 cd/m2 atuais para 1.000 s de cd/m2). Isso resulta em qualidade de vídeo que se aproxima mais da vida real, com cores mais ricas, realces mais brilhantes e sombras mais escuras.

Para saber mais sobre a captura de vídeo HDR, consulte a documentação sobre captura de vídeo HDR.

Mídia

Áudio espacial

O áudio espacial é uma experiência de áudio imersiva que torna o som do conteúdo de mídia mais realista para os usuários. Consulte nossa documentação sobre Áudio espacial para ver detalhes sobre como fazer a integração com esse recurso.

Roteamento de áudio antecipado

Para ajudar os apps de música a identificar como o áudio vai ser roteado, o Android 13 introduz APIs de rota de áudio na classe AudioManager. A API getAudioDevicesForAttributes() permite extrair uma lista de dispositivos que podem ser usados para tocar o áudio especificado e a API getDirectProfilesForAttributes() ajuda você a entender se o stream de áudio pode ser reproduzido diretamente. Use essas novas APIs para definir o melhor AudioFormat a ser usado na sua faixa de áudio.

Acessibilidade

Audiodescrição

O Android 13 (API de nível 33) introduz uma nova preferência de acessibilidade que pode ser aplicada para todo o sistema, permitindo que os usuários ativem audiodescrições em todos os apps. A audiodescrição é uma faixa de narração do sistema que descreve a apresentação do app e o que está acontecendo na tela nos intervalos em que o áudio é pausado. Os apps podem seguir as preferências de audiodescrição do usuário. Para isso, basta consultá-las usando isAudioDescriptionRequested(), conforme mostrado no snippet de código a seguir:

Kotlin


private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (accessibilityManager.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Java


private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

Para monitorar mudanças nas preferências do usuário, o app pode adicionar um listener ao AccessbilityManager:

Kotlin

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Java

private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}

Principal recurso

Atualizações do OpenJDK 11

O Android 13 inicia o trabalho de atualização das bibliotecas principais do Android para se alinhar à versão LTS do OpenJDK 11, com atualizações de biblioteca e suporte à linguagem Java 11 para desenvolvedores de aplicativos e plataformas. As principais mudanças de biblioteca introduzidas no Android 13 também vão ser disponibilizadas para dispositivos Android 12 por uma atualização do sistema do Google Play para o módulo ART Mainline.

O Android 13 inclui as mudanças abaixo nas principais bibliotecas:

  • Suporte à palavra-chave var para variáveis locais e como lambdas de parâmetros.
  • Novos métodos na classe String:

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • Suporte a Collection.toArray(IntFunction) para facilitar a adaptação de uma coleção a uma matriz.

  • Suporte aos métodos ifPresentOrElse(), isEmpty(), orElseThrow() e stream() nas classes java.util Optional, OptionalDouble, OptionalInt e OptionalLong.

  • Suporte estendido para as SocketOptions, incluindo a reutilização de soquetes.

  • As funcionalidades NullReader, NullWriter, InputStream, OutputStream e transferTo() Reader, que transferem caracteres de leitura para um Writer.

  • A funcionalidade para codificação e decodificação de URLs usando Charsets foi adicionada.

  • Funcionalidade de Charset para FileReader, FileWriter, PrintStream e PrintWriter.

  • Novas funções transferTo(), readNBytes(), readAllBytes() e writeBytes() para ByteArrayInput ou OutputStream e Input ou OutputStream.

  • Suporte ao ambiente de execução e ao compilador para java.lang.invoke.VarHandle.

  • Atualização do java.util.concurrent para a API OpenJDK 11 usando VarHandle internamente.

Java e OpenJDK são marcas registradas da Oracle e/ou afiliadas.