Visão geral de recursos e APIs

O Android 14 introduz ótimos recursos e APIs para desenvolvedores. As informações a seguir ajudam você a saber mais sobre os recursos dos seus apps e a começar a usar as APIs relacionadas.

Para uma lista detalhada de 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. No Android 14, procure APIs que foram adicionadas no nível 34. 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.

为帮助您针对区分性别的语言构建以用户为中心的界面,Android 14 引入了 Grammatical Inflection API,让您无需重构应用便能添加对语法性别的支持。

Preferências regionais

Regional preferences enable users to personalize temperature units, the first day of the week, and numbering systems. A European living in the United States might prefer temperature units to be in Celsius rather than Fahrenheit and for apps to treat Monday as the beginning of the week instead of the US default of Sunday.

New Android Settings menus for these preferences provide users with a discoverable and centralized location to change app preferences. These preferences also persist through backup and restore. Several APIs and intents—such as getTemperatureUnit and getFirstDayOfWeek— grant your app read access to user preferences, so your app can adjust how it displays information. You can also register a BroadcastReceiver on ACTION_LOCALE_CHANGED to handle locale configuration changes when regional preferences change.

To find these settings, open the Settings app and navigate to System > Languages & input > Regional preferences.

Regional preferences screen in Android system settings.
Temperature options for regional preferences in Android system settings.

Acessibilidade

Dimensionamento de fonte não linear para 200%

从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍选项。

为防止屏幕上的大文本元素放大过大,系统会采用非线性放大曲线。这种放大策略意味着大号文本的放大比例不会与较小的文本相同。非线性字体缩放有助于保持不同大小元素之间的比例层次结构,同时缓解高级别线性文本缩放的问题(例如文本被截断或文本因超大显示大小而难以阅读)。

使用非线性字体放大测试应用

在设备的无障碍设置中启用最大字号,以测试应用。

如果您已经使用放大像素 (sp) 单位来定义文本大小,那么这些额外的选项和缩放改进会自动应用于应用中的文本。但是,您仍然应该在启用最大字体大小 (200%) 的情况下执行界面测试,以确保应用正确应用字体大小,并且可以适应更大的字体大小,而不影响易用性。

要启用 200% 字号,请按以下步骤操作:

  1. 打开“设置”应用,然后依次前往无障碍 > 显示大小和文字
  2. 字号选项中,点按加号 (+) 图标,直到启用最大字号设置,如本部分随附的图片所示。

针对文本大小使用放大像素 (sp) 单位

请务必始终以 sp 为单位指定文本大小。当应用使用 sp 单位时,Android 可以应用用户的首选文本大小并相应地缩放。

不要为内边距使用 sp 单位,也不假设隐式内边距定义视图高度:使用非线性字体缩放 sp 尺寸可能不成比例,因此 4sp + 20sp 可能不等于 24sp。

转换放大像素 (sp) 单位

使用 TypedValue.applyDimension() 从 sp 单位转换为像素,并使用 TypedValue.deriveDimension() 将像素转换为 sp。这些方法会自动应用适当的非线性缩放曲线。

避免使用 Configuration.fontScaleDisplayMetrics.scaledDensity 对方程进行硬编码。由于字体缩放是非线性的,因此 scaledDensity 字段不再准确。fontScale 字段应仅用于提供信息,因为字体不再使用单个标量值进行缩放。

对 lineHeight 使用 sp 单位

始终使用 sp 单位(而非 dp)定义 android:lineHeight,以便行高随文本一起缩放。否则,如果您的文本为 sp,而 lineHeight 以 dp 或 px 为单位,则文本无法缩放且看起来狭窄。TextView 会自动更正 lineHeight 以保留您预期的比例,但前提是以 sp 为单位同时定义 textSizelineHeight

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 da câmera

O Android 14 faz upgrade e melhora as extensões da câmera, permitindo que os apps lidem com tempos de processamento mais longos, possibilitando imagens aprimoradas usando algoritmos de computação intensiva, 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. Exemplos dessas melhorias incluem:

Zoom no sensor

CameraCharacteristics 中的 REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE 包含 SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 时,您的应用可以使用高级传感器功能,通过使用 CaptureRequest 以及数据流用例设置为 CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 的 RAW 目标,为剪裁后的 RAW 数据流提供与完整视野相同的像素。通过实现请求替换控件,更新后的摄像头让用户可在其他摄像头控件准备就绪之前实现缩放控制。

Á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

Credential Manager

O Android 14 adiciona o Gerenciador de credenciais como uma API de plataforma, com suporte extra a dispositivos Android 4.4 (nível 19 da API) usando uma Biblioteca Jetpack usando o Google Play Services. O objetivo do Gerenciador de credenciais é facilitar o login para usuários com APIs que recuperam e armazenam credenciais com provedores de credenciais configurados pelo usuário. O Gerenciador de credenciais oferece suporte a vários métodos de login, incluindo nome de usuário e senha, chaves de acesso e soluções de login federadas (como o recurso "Fazer login com o Google") em uma única API.

As chaves de acesso oferecem muitas vantagens. Por exemplo, as chaves de acesso são criadas com base nos padrões do setor e podem funcionar em diferentes sistemas operacionais e ecossistemas de navegadores e podem ser usadas em sites e apps.

Para saber mais, consulte a documentação do Gerenciador de credenciais e chaves de acesso e a postagem do blog sobre o Gerenciador de credenciais e chaves de acesso.

Conexão Saúde

Health Connect is an on-device repository for user health and fitness data. It allows users to share data between their favorite apps, with a single place to control what data they want to share with these apps.

On devices running Android versions prior to Android 14, Health Connect is available to download as an app on the Google Play store. Starting with Android 14, Health Connect is part of the platform and receives updates through Google Play system updates without requiring a separate download. With this, Health Connect can be updated frequently, and your apps can rely on Health Connect being available on devices running Android 14 or higher. Users can access Health Connect from the Settings in their device, with privacy controls integrated into the system settings.

Users can get started using Health Connect without a separate app download on devices running Android 14 or higher.
Users can control which apps have access to their health and fitness data through system settings.

Health Connect includes several new features in Android 14, such as exercise routes, allowing users to share a route of their workout which can be visualized on a map. A route is defined as a list of locations saved within a window of time, and your app can insert routes into exercise sessions, tying them together. To ensure that users have complete control over this sensitive data, users must allow sharing individual routes with other apps.

For more information, see the Health Connection documentation and the blogpost on What's new in Android Health.

Atualizações do OpenJDK 17

O Android 14 continua o trabalho de atualizar as principais bibliotecas do Android para se alinhar aos recursos das versões mais recentes do LTS do OpenJDK, incluindo atualizações de bibliotecas e suporte à linguagem Java 17 para desenvolvedores de apps e plataformas.

Os seguintes recursos e melhorias estão incluídos:

  • Aproximadamente 300 classes java.base foram atualizadas para oferecer suporte ao Java 17.
  • Blocos de texto, que introduzem literais de string de várias linhas à linguagem de programação Java.
  • Correspondência de padrão para instanceof, que permite que um objeto seja tratado como um tipo específico em uma instanceof sem nenhuma outra variável.
  • Classes seladas, que permitem restringir quais classes e interfaces podem estender ou implementar essas classes.

Graças às atualizações do sistema do Google Play (Projeto Mainline), mais de 600 milhões de dispositivos podem receber as atualizações mais recentes do Android Runtime (ART), que incluem essas mudanças. Isso faz parte do nosso compromisso de oferecer aos apps um ambiente mais consistente e seguro em todos os dispositivos, com novos recursos para os usuários, independente da versão da plataforma.

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

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 especificar metadados do app, por exemplo, práticas de segurança de dados, para incluir 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

视频:预测性返回动画

Android 13 在开发者选项背后引入了预测性“返回主屏幕”动画。在已启用开发者选项的受支持应用中使用时,滑回手势会显示动画,表明返回手势会使应用退回到主屏幕。

Android 14 包含针对“预测性返回”的多项改进和新指南:

在此 Android 14 预览版中,所有预测性返回功能都是位于开发者选项背后。请参阅与将您的应用迁移到预测性返回有关的开发者指南,以及与创建自定义应用内转换有关的开发者指南

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

借助按应用替换项,设备制造商可以在大屏设备上更改应用的行为。例如,FORCE_RESIZE_APP 替换项指示系统调整应用大小以适应显示屏尺寸(避免尺寸兼容模式),即使在应用清单中设置了 resizeableActivity="false" 也是如此。

替换项旨在改善大屏设备上的用户体验。

借助新的清单属性,您可以为应用停用某些设备制造商替换项。

Substituições por app de usuários 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, independente 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

Em dispositivos Pixel 8 Pro com a atualização de recursos de dezembro, os desenvolvedores podem testar respostas inteligentes de alta qualidade no Gboard com modelos de linguagem grandes (LLMs) executados no Google Tensor.

Esse recurso está disponível como uma visualização limitada em inglês americano no WhatsApp, Line e KakaoTalk. É necessário usar um dispositivo Pixel 8 Pro com o Gboard como teclado.

Para testá-lo, primeiro ative o recurso em Configurações > Opções do desenvolvedor > Configurações da AICore > Ativar Aicore Persistent.

Em seguida, abra uma conversa em um app com suporte para conferir a Resposta inteligente com tecnologia LLM na linha de sugestões do Gboard em resposta a mensagens recebidas.

O Gboard usa LLMs no dispositivo para oferecer respostas inteligentes de alta qualidade.

Gráficos

Os caminhos podem ser consultados e interpolados

Android's Path API is a powerful and flexible mechanism for creating and rendering vector graphics, with the ability to stroke or fill a path, construct a path from line segments or quadratic or cubic curves, perform boolean operations to get even more complex shapes, or all of these simultaneously. One limitation is the ability to find out what is actually in a Path object; the internals of the object are opaque to callers after creation.

To create a Path, you call methods such as moveTo(), lineTo(), and cubicTo() to add path segments. But there has been no way to ask that path what the segments are, so you must retain that information at creation time.

Starting in Android 14, you can query paths to find out what's inside of them. First, you need to get a PathIterator object using the Path.getPathIterator API:

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();

Next, you can call PathIterator to iterate through the segments one by one, retrieving all of the necessary data for each segment. This example uses PathIterator.Segment objects, which packages up the data for you:

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());
}

PathIterator also has a non-allocating version of next() where you can pass in a buffer to hold the point data.

One of the important use cases of querying Path data is interpolation. For example, you might want to animate (or morph) between two different paths. To further simplify that use case, Android 14 also includes the interpolate() method on Path. Assuming the two paths have the same internal structure, the interpolate() method creates a new Path with that interpolated result. This example returns a path whose shape is halfway (a linear interpolation of .5) between path and 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);
}

The Jetpack graphics-path library enables similar APIs for earlier versions of Android as well.

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 o 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 renderização de baixa latência.