Visão geral de recursos e APIs

O Android 14 introduz ótimos recursos e APIs para desenvolvedores. Veja a seguir os recursos para apps e comece a usar as APIs relacionadas.

Para uma lista detalhada das APIs adicionadas, modificadas e removidas, leia o Relatório de diferenças da API. Para conferir detalhes sobre as APIs adicionadas, acesse a Referência da API do Android. Para o Android 14, procure APIs que foram adicionadas no nível 34 da API. Para saber mais sobre as áreas em que as mudanças na plataforma podem afetar seus apps, confira as mudanças de comportamento do Android 14 para apps destinados ao Android 14 e para todos os apps.

Internacionalização

Seleção de idioma por app

Android 14 扩展了 Android 13(API 级别 33)中引入的按应用设定语言功能,并包含以下额外功能:

  • 自动生成应用的 localeConfig:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以将应用配置为自动支持各应用语言偏好设定。Android Gradle 插件会根据您的项目资源生成 LocaleConfig 文件,并在最终清单文件中添加对该文件的引用,这样您就不再需要手动创建或更新该文件。AGP 使用应用模块的 res 文件夹中的资源以及任何库模块依赖项来确定要在 LocaleConfig 文件中添加的语言区域。

  • 动态更新应用的 localeConfig:使用 LocaleManager 方法中的 setOverrideLocaleConfig()getOverrideLocaleConfig() 可以在设备的系统设置中动态更新应用的受支持语言列表。有了这种灵活性,您可以按区域自定义支持的语言列表、运行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。

  • 输入法 (IME) 的应用语言可见性:IME 可以利用 getApplicationLocales() 方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。

API Grammatical Inflection

Três bilhões de pessoas falam idiomas com marcação de gênero: idiomas em que categorias gramaticais, como substantivos, verbos, adjetivos e preposições, mudam de acordo com o gênero das pessoas e os objetos sobre os quais elas falam. Tradicionalmente, vários idiomas com marcação de gênero usam o gênero gramatical masculino como padrão ou genérico.

Referir-se a usuários no gênero gramatical errado, como falar com uma mulher no gênero gramatical masculino, pode afetar negativamente o desempenho e a atitude dela. Por outro lado, uma interface com linguagem que reflete corretamente o gênero gramatical do usuário pode melhorar o engajamento e fornecer uma experiência do usuário mais personalizada e natural.

Para ajudar a criar uma interface focada no usuário para idiomas com flexão de gênero, o Android 14 apresenta a API Grammatical Inflection, que permite adicionar suporte aos gêneros gramaticais sem refatorar o app.

Preferências regionais

As preferências regionais permitem que os usuários personalizem unidades de temperatura, o primeiro dia da semana e sistemas de numeração. Um europeu que mora nos Estados Unidos pode preferir que as unidades de temperatura estejam em Celsius em vez de Fahrenheit e que apps tratem a segunda-feira como o início da semana, em vez do padrão dos EUA de usar o domingo.

Os novos menus de configurações do Android para essas preferências oferecem aos usuários um local detectável e centralizado para mudar as preferências do app. Essas preferências também são mantidas com backup e restauração. Várias APIs e intents (como getTemperatureUnit e getFirstDayOfWeek) permitem que o app acesse as preferências do usuário, ajustando a forma como as informações são exibidas. Também é possível registrar um BroadcastReceiver em ACTION_LOCALE_CHANGED para processar mudanças de configuração de localidade quando as preferências regionais mudam.

Para encontrar essas configurações, abra o app Configurações e navegue até Sistema > Idiomas e entrada > Preferências regionais.

Tela de preferências regionais nas configurações do sistema Android.
Opções de temperatura para preferências regionais nas configurações do sistema Android.

Acessibilidade

Dimensionamento de fonte não linear para 200%

No Android 14 e versões mais recentes, o sistema oferece suporte ao escalonamento de fontes até 200%, oferecendo aos usuários com baixa visão outras opções de acessibilidade alinhadas às Diretrizes de Acessibilidade para Conteúdo Web (WCAG, na sigla em inglês).

Para evitar que elementos de texto grandes na tela fiquem grandes demais, o sistema aplica uma curva de dimensionamento não linear. Essa estratégia significa que textos grandes não são dimensionados na mesma taxa que os menores. O dimensionamento de fonte não linear ajuda a preservar a hierarquia proporcional entre elementos de tamanhos diferentes, reduzindo problemas com o dimensionamento linear em graus elevados, como cortes de texto ou dificuldade de leitura devido a telas muito grandes.

Testar o app com dimensionamento de fontes não linear

Ative o tamanho máximo da fonte nas configurações de acessibilidade de um dispositivo para testar o app.

Se você já usa unidades de pixels dimensionados (sp, na sigla em inglês) para definir o dimensionamento do texto, essas outras opções e melhorias de dimensionamento são aplicadas automaticamente ao texto do app. No entanto, ainda é necessário realizar testes de interface com o tamanho máximo da fonte ativado (200%) para garantir que o app aplique os tamanhos de fonte corretamente e possa acomodar fontes maiores sem afetar a usabilidade.

Para ativar o tamanho de fonte de 200%, siga estas etapas:

  1. Abra o app Configurações e navegue até Acessibilidade > Texto e tamanho de exibição.
  2. Na opção Tamanho da fonte, toque no ícone de adição (+) até ativar a configuração de tamanho máximo de fonte, conforme mostrado na imagem que acompanha esta seção.

Usar unidades de pixels dimensionados (sp) para tamanhos de texto

Sempre especifique tamanhos de texto em unidades de sp. Quando o app usa unidades de sp, o Android pode aplicar o tamanho de texto preferencial do usuário e escaloná-lo adequadamente.

Não use unidades de sp para preenchimento ou defina as alturas da visualização presumindo que o padding implícito: com o dimensionamento de fonte não linear, as dimensões de sp podem não ser proporcionais. Portanto, 4sp + 20sp podem não ser iguais a 24sp.

Converter unidades de pixels dimensionados

Use TypedValue.applyDimension() para converter unidades de sp em pixels, e TypedValue.deriveDimension() para converter pixels em sp. Esses métodos aplicam a curva de dimensionamento não linear adequada automaticamente.

Evite equações fixadas no código usando Configuration.fontScale ou DisplayMetrics.scaledDensity. Como o dimensionamento da fonte não é linear, o campo scaledDensity não é mais preciso. O campo fontScale precisa ser usado apenas para fins informativos porque as fontes não são mais escalonadas com um único valor escalar.

Usar unidades sp para lineHeight

Sempre defina android:lineHeight usando unidades sp em vez de dp, para que a altura da linha seja dimensionada de acordo com o texto. Caso contrário, se o texto for sp, mas a lineHeight estiver em dp ou px, ele não será dimensionado e parecerá apertado. A TextView corrige automaticamente a lineHeight para que as proporções pretendidas sejam preservadas, mas somente se textSize e lineHeight forem definidos em unidades sp.

Câmera e mídia

Ultra HDR para imagens

标准动态范围 (SDR) 与高动态范围 (HDR) 图片质量的示意图。

Android 14 增加了对高动态范围 (HDR) 图片的支持,此类图片可在拍照时保留来自传感器的更多信息,从而实现鲜艳的色彩和更高的对比度。Android 采用 Ultra HDR 格式,这种格式可完全向后兼容 JPEG 图片,允许应用与 HDR 图片无缝互操作,从而根据需要以标准动态范围 (SDR) 显示图片。

当您的应用为其 Activity 窗口选择使用 HDR 界面(通过清单条目或在运行时通过调用 Window.setColorMode())时,框架会自动在 HDR 界面中呈现这些图片。您还可以在支持的设备上拍摄压缩的 Ultra HDR 静态图片。从传感器中恢复的颜色越多,博文中的编辑效果就越灵活。与 Ultra HDR 图片关联的 Gainmap 可用于使用 OpenGL 或 Vulkan 渲染这些图片。

Zoom, foco, pós-visualização e muito mais nas extensões de câmera

O Android 14 faz upgrade e aprimora as extensões da câmera, permitindo que os apps processem tempos de processamento mais longos, possibilitando imagens aprimoradas com algoritmos de uso intenso de computação, como fotografia com pouca luz em dispositivos com suporte. Esses recursos oferecem aos usuários uma experiência ainda mais robusta ao usar os recursos de extensão da câmera. Veja alguns exemplos dessas melhorias:

Zoom no sensor

Quando REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE em CameraCharacteristics contém SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, seu app pode usar recursos avançados de sensor para fornecer a um stream RAW cortado os mesmos pixels do campo de visão completo, usando um CaptureRequest com um destino RAW que tenha o caso de uso de stream definido como CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW. Ao implementar os controles de substituição de solicitação, a câmera atualizada oferece aos usuários controle de zoom antes mesmo de outros controles da câmera ficarem prontos.

Áudio USB sem perdas

O Android 14 ganha suporte a formatos de áudio sem perdas para experiências a nível de audiófilo em fones de ouvido com fio USB. Você pode consultar um dispositivo USB para os atributos preferidos de mixer, registrar um listener para mudanças nos atributos de mixer preferidos e configurar os atributos usando a classe AudioMixerAttributes. Essa classe representa o formato, como a máscara de canal, a taxa de amostragem e o comportamento do mixer de áudio. A classe permite que o áudio seja enviado diretamente, sem mixagem, ajuste de volume ou efeitos de processamento.

Produtividade e ferramentas para desenvolvedores

Gerenciador de credenciais

Android 14 adds Credential Manager as a platform API, with additional support back to Android 4.4 (API level 19) devices through a Jetpack Library using Google Play services. Credential Manager aims to make sign-in easier for users with APIs that retrieve and store credentials with user-configured credential providers. Credential Manager supports multiple sign-in methods, including username and password, passkeys, and federated sign-in solutions (such as Sign-in with Google) in a single API.

Passkeys provide many advantages. For example, passkeys are built on industry standards, can work across different operating systems and browser ecosystems, and can be used with both websites and apps.

For more information, see the Credential Manager and passkeys documentation and the blogpost about Credential Manager and passkeys.

Conexão Saúde

Health Connect 是存储用户健康与健身数据的设备端存储库。它可让用户在喜爱的应用之间共享数据,并且只需一个位置即可控制他们要与这些应用共享哪些数据。

在搭载 Android 14 之前的 Android 版本的设备上,Health Connect 可作为应用从 Google Play 商店下载。从 Android 14 开始,Health Connect 已成为平台的一部分,它通过 Google Play 系统更新接收更新,而无需单独下载。这样一来,您可以经常更新 Health Connect,并且您的应用可以依赖于搭载 Android 14 或更高版本的设备上的 Health Connect。用户可以通过设备的“设置”中访问 Health Connect,并将隐私控制集成到系统设置中。

用户无需在搭载 Android 14 或更高版本的设备上单独下载应用,即可开始使用 Health Connect。
用户可以通过系统设置控制哪些应用有权访问其健康与健身数据。

Health Connect 在 Android 14 中包含多项新功能(例如锻炼路线),可让用户分享可在地图上直观呈现的锻炼路线。路线是指一段时间内保存的位置列表,您的应用可以将路线插入锻炼时段,并将其绑定在一起。为了确保用户能够完全控制这些敏感数据,用户必须允许与其他应用共享个别路由。

如需了解详情,请参阅 Health Connection 文档和有关 Android Health 的新变化的博文。

Atualizações do OpenJDK 17

Android 14 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致,包括适合应用和平台开发者的库更新和 Java 17 语言支持。

其中包含以下功能和改进:

  • 将大约 300 个 java.base 类更新为支持 Java 17。
  • 文本块 - 为 Java 编程语言引入了多行字符串字面量。
  • instanceof 模式匹配:可让对象在 instanceof 中被视为具有特定类型,而无需任何额外的变量。
  • 密封类:允许您限制哪些类和接口可以扩展或实现它们。

得益于 Google Play 系统更新 (Project Mainline),6 亿多台设备能够接收包含这些更改的最新 Android 运行时 (ART) 更新。我们致力于为应用提供更加一致、安全的跨设备环境,并为用户提供独立于平台版本的新功能。

Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

Melhorias para app stores

O Android 14 apresenta várias APIs PackageInstaller que permitem que as app stores melhorem a experiência do usuário.

Solicitar aprovação da instalação antes do download

A instalação ou atualização de um app pode exigir a aprovação do usuário. Por exemplo, quando um instalador usando a permissão REQUEST_INSTALL_PACKAGES tenta instalar um novo app. Nas versões anteriores do Android, as app stores só podem solicitar a aprovação do usuário depois que os APKs são gravados na sessão de instalação e a sessão é confirmada.

No Android 14 e versões mais recentes, o método requestUserPreapproval() permite que os instaladores solicitem a aprovação do usuário antes de confirmar a sessão de instalação. Essa melhoria permite que a app store adie o download de APKs até que a instalação seja aprovada pelo usuário. Além disso, depois que um usuário aprova a instalação, a app store pode fazer o download e instalar o app em segundo plano sem interromper o usuário.

Reivindicar a responsabilidade por atualizações futuras

O método setRequestUpdateOwnership() permite que um instalador indique ao sistema que pretende ser responsável por futuras atualizações de um app que ele está instalando. Esse recurso permite a aplicação da atualização de propriedade, o que significa que apenas o proprietário da atualização tem permissão para instalar atualizações automáticas no app. A aplicação da atualização de propriedade ajuda a garantir que os usuários recebam atualizações apenas da app store esperada.

Qualquer outro instalador, incluindo aqueles que usam a permissão INSTALL_PACKAGES, precisa receber aprovação explícita do usuário para instalar uma atualização. Se um usuário decidir continuar com uma atualização de outra fonte, a propriedade da atualização será perdida.

Atualizar apps em momentos menos incômodos

Geralmente, as app stores não querem atualizar um app que está em uso, porque isso encerra os processos em execução e pode interromper o que o usuário está fazendo.

No Android 14 e versões mais recentes, a API InstallConstraints oferece aos instaladores uma maneira de garantir que as atualizações do app ocorram em um momento oportuno. Por exemplo, uma app store pode chamar o método commitSessionAfterInstallConstraintsAreMet() para garantir que uma atualização só seja confirmada quando o usuário não estiver mais interagindo com o app em questão.

Instalar divisões opcionais de forma simples

Com os APKs divididos, os recursos de um app podem ser enviados em arquivos APK separados em vez de como um APK monolítico. Os APKs divididos permitem que as app stores otimizem a entrega de diferentes componentes do app. Por exemplo, app stores podem otimizar com base nas propriedades do dispositivo de destino. A API PackageInstaller oferece suporte a divisões desde que foi introduzida no nível 22 da API.

No Android 14, o método setDontKillApp() permite que um instalador indique que os processos em execução do app não serão encerrados quando novas divisões forem instaladas. As app stores podem usar esse recurso para instalar novos recursos enquanto o usuário está usando o app.

Pacotes de metadados do app

No Android 14 e versões mais recentes, o instalador do pacote do Android permite que você especifique os metadados do app, como práticas de segurança de dados, que serão incluídos em páginas de app stores, como o Google Play.

Detectar quando usuários fazem capturas de tela no dispositivo

Para criar uma experiência mais padronizada para detectar capturas de tela, o Android 14 apresenta uma API de detecção de capturas de tela que preserva a privacidade. Ela permite que os apps registrem callbacks por atividade. Esses callbacks são invocados, e o usuário é notificado quando faz uma captura de tela enquanto a atividade está visível.

Experiência do usuário

Ações personalizadas e melhoria na classificação do Sharesheet

Android 14 更新了系统 Sharesheet,以便为用户提供自定义应用操作和信息更丰富的预览结果。

添加自定义操作

对于 Android 14,您的应用可以向其调用的系统 Sharesheet 添加自定义操作

Sharesheet 上自定义操作的屏幕截图。

提高直接共享目标的排名

Android 14 根据来自应用的更多信号来确定直接共享目标的排名,以便为用户提供更实用的结果。如需提供最有用的排名信号,请遵循提升直接共享目标的排名指南。通信应用还可以报告外发和传入消息的快捷方式使用情况

共享表单中的“直接共享”行,如 1

Suporte a animações de voltas preditivas integradas e personalizadas

Vídeo: animações de volta preditiva

O Android 13 introduziu a animação de volta preditiva à tela inicial por trás de uma opção do desenvolvedor. Quando usada em um app com suporte para a opção para desenvolvedor ativada, deslizar para trás mostra uma animação indicando que o gesto de retorno sai do app de volta à tela inicial.

O Android 14 inclui várias melhorias e novas orientações para a volta preditiva:

Com esta versão de pré-lançamento do Android 14, todos os recursos de volta preditiva permanecem por trás de uma opção para desenvolvedores. Consulte o guia do desenvolvedor para migrar seu app para a volta preditiva e o guia do desenvolvedor para criar transições personalizadas no app.

Substituições por app do fabricante de dispositivos de tela grande

As substituições por app permitem que os fabricantes mudem o comportamento de apps em dispositivos de tela grande. Por exemplo, a substituição FORCE_RESIZE_APP instrui o sistema a redimensionar o app para que ele se ajuste às dimensões de exibição (evitando o modo de compatibilidade de tamanho), mesmo que resizeableActivity="false" esteja definido no manifesto do app.

O objetivo das substituições é melhorar a experiência do usuário em telas grandes.

As novas propriedades do manifesto permitem desativar algumas substituições do fabricante do dispositivo para o app.

Substituições de usuários por app em telas grandes

As substituições por app mudam o comportamento dos apps em dispositivos de tela grande. Por exemplo, a substituição do fabricante do dispositivo OVERRIDE_MIN_ASPECT_RATIO_LARGE define a proporção do app como 16:9, independentemente da configuração dele.

O QPR1 do Android 14 permite que os usuários apliquem substituições por app usando um novo menu de configurações em dispositivos de tela grande.

Compartilhamento de tela de app

Com o compartilhamento de tela do app, os usuários podem compartilhar uma janela do app em vez da tela inteira do dispositivo durante a gravação do conteúdo da tela.

Com o compartilhamento de tela do app, a barra de status, a barra de navegação, as notificações e outros elementos da interface do sistema são excluídos da exibição compartilhada. Somente o conteúdo do app selecionado é compartilhado.

O compartilhamento de tela no app aumenta a produtividade e a privacidade porque permite que os usuários executem vários apps, mas limite o compartilhamento de conteúdo a um único app.

Resposta inteligente com LLM no Gboard no Pixel 8 Pro

在附带 12 月功能更新版的 Pixel 8 Pro 设备上,开发者可以在 Gboard 中试用更优质的智能回复(由 Google Tensor 上运行的设备端大型语言模型 (LLM) 提供支持)。

此功能目前仅在 WhatsApp、Line 和 KakaoTalk 中推出美式英语的有限预览版。它需要使用配有 Gboard 的 Pixel 8 Pro 设备作为键盘。

如需试用,请先在设置 > 开发者选项 > AiCore 设置 > 启用 Aicore Persistent 中启用该功能。

接下来,在受支持的应用中打开对话,以便在 Gboard 的建议栏中看到由 LLM 提供支持的智能回复,以响应收到的消息。

Gboard 利用设备端 LLM 提供更高质量的智能回复。

Gráficos

Os caminhos podem ser consultados e interpolados

A API Path do Android é um mecanismo eficiente e flexível para criar e renderizar gráficos vetoriais, com a capacidade de traçar ou preencher um caminho, construir um caminho a partir de segmentos de linha ou curvas quadráticas ou cúbicas, executar operações booleanas para conseguir formas ainda mais complexas ou todas essas simultaneamente. Uma limitação é a capacidade de descobrir o que está realmente em um objeto de caminho. Os componentes internos do objeto são opacos para os autores da chamada após a criação.

Para criar um Path, chame métodos como moveTo(), lineTo() e cubicTo() para adicionar segmentos de caminho. Mas não há como perguntar a esse caminho quais são os segmentos. Portanto, você precisa manter essas informações no momento da criação.

A partir do Android 14, é possível consultar caminhos para descobrir o que há dentro deles. Primeiro, você precisa conseguir um objeto PathIterator usando a API Path.getPathIterator:

Kotlin

val path = Path().apply {
    moveTo(1.0f, 1.0f)
    lineTo(2.0f, 2.0f)
    close()
}
val pathIterator = path.pathIterator

Java

Path path = new Path();
path.moveTo(1.0F, 1.0F);
path.lineTo(2.0F, 2.0F);
path.close();
PathIterator pathIterator = path.getPathIterator();

Em seguida, chame PathIterator para iterar os segmentos um por um, recuperando todos os dados necessários para cada segmento. Este exemplo usa objetos PathIterator.Segment, que empacotam os dados para você:

Kotlin

for (segment in pathIterator) {
    println("segment: ${segment.verb}, ${segment.points}")
}

Java

while (pathIterator.hasNext()) {
    PathIterator.Segment segment = pathIterator.next();
    Log.i(LOG_TAG, "segment: " + segment.getVerb() + ", " + segment.getPoints());
}

O PathIterator também tem uma versão não alocada de next(), em que é possível transmitir um buffer para armazenar os dados dos pontos.

Um dos casos de uso importantes para consultar os dados Path é a interpolação. Por exemplo, você pode querer animar (ou transformar) entre dois caminhos diferentes. Para simplificar ainda mais esse caso de uso, o Android 14 também inclui o método interpolate() no Path. Supondo que os dois caminhos tenham a mesma estrutura interna, o método interpolate() cria um novo Path com esse resultado interpolado. Este exemplo retorna um caminho com um formato que está na metade do caminho (uma interpolação linear de 0,5) entre path e otherPath:

Kotlin

val interpolatedResult = Path()
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, .5f, interpolatedResult)
}

Java

Path interpolatedResult = new Path();
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, 0.5F, interpolatedResult);
}

A biblioteca graphics-path do Jetpack também permite APIs semelhantes em versões anteriores do Android.

Malhas personalizadas com sombreadores de vértice e fragmento

Há muito tempo, o Android oferece suporte ao desenho de malhas de triângulo com sombreamento personalizado, mas o formato da malha de entrada ficou limitado a algumas combinações de atributos predefinidas. O Android 14 adiciona suporte a malhas personalizadas, que podem ser definidas como triângulos ou tiras de triângulo e, opcionalmente, indexadas. Essas malhas são especificadas com atributos personalizados, passos de vértice, variações e sombreadores de vértice e fragmento escritos em AGSL.

O sombreador de vértice define as variações, como posição e cor, enquanto o sombreador de fragmento pode, opcionalmente, definir a cor para o pixel, normalmente usando as variações criadas pelo sombreador de vértice. Se a cor for fornecida pelo sombreador de fragmento, ela será misturada com a cor Paint atual usando o modo de mesclagem selecionado ao desenhar a malha. Uniformes podem ser transmitidos para o fragmento e sombreadores de vértice para maior flexibilidade.

Renderizador de buffer de hardware para Canvas

Para ajudar a usar a API Canvas do Android para desenhar com aceleração de hardware em uma HardwareBuffer, o Android 14 apresenta o HardwareBufferRenderer. Essa API é útil principalmente quando o caso de uso envolve a comunicação com o compositor do sistema pelo SurfaceControl para desenho de baixa latência.