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

有 30 亿人在使用区分性别的语言,此类语言的语法类别(例如名词、动词、形容词和介词)会根据您交谈所涉及的人或物的性别而变化。传统上,许多区分性别的语言使用阳性语法性别作为默认或通用性别。

以错误的语法性别来称呼用户,例如以阳性语法性别来称呼女性,可能会对她们的表现和态度产生负面影响。相比之下,界面语言如果能正确反映用户的语法性别,就可以提高用户互动度,并提供更个性化、更自然的用户体验。

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

Uma ilustração da qualidade de imagem de intervalo dinâmico padrão (SDR) e de High Dynamic Range (HDR).

O Android 14 adiciona suporte a imagens de High Dynamic Range (HDR) que retêm mais informações do sensor ao tirar uma foto, o que permite cores vibrantes e maior contraste. O Android usa o formato Ultra HDR, que é totalmente compatível com versões anteriores de imagens JPEG, permitindo que os apps interoperem perfeitamente com imagens HDR, exibindo-as no intervalo dinâmico padrão (SDR, na sigla em inglês) conforme necessário.

A renderização em HDR dessas imagens na interface é feita automaticamente pelo framework quando o app aceita o uso da interface HDR na janela de atividade, seja por uma entrada de manifesto ou durante a execução, chamando Window.setColorMode(). Também é possível capturar imagens estáticas Ultra HDR compactadas em dispositivos com suporte. Com mais cores extraídas do sensor, a edição na postagem pode ser mais flexível. A Gainmap associada a imagens Ultra HDR pode ser usada para renderizá-las usando OpenGL ou 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

Android 14 开始支持无损音频格式,通过 USB 有线耳机提供发烧级体验。您可以查询 USB 设备的首选混音器属性,注册监听器以监听首选混音器属性的变化,并使用 AudioMixerAttributes 类配置混音器属性。此类表示格式,例如声道掩码、采样率和混音器行为。该类允许直接发送音频,而不进行混音、音量调整或处理效果。

Produtividade e ferramentas para desenvolvedores

Credential Manager

Android 14 添加了 Credential Manager 作为平台 API,并通过使用 Google Play 服务的 Jetpack 库为 Android 4.4(API 级别 19)设备提供了额外的支持。凭据管理器旨在使用 API 通过用户配置的凭据提供程序检索和存储凭据,让用户更轻松地登录。凭据管理器在一个 API 中支持多种登录方法,包括用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 账号登录”)。

通行密钥具有许多优势。例如,通行密钥基于业界标准构建,可在不同的操作系统和浏览器生态系统中使用,还可用于网站和应用。

如需了解详情,请参阅凭据管理器和通行密钥文档以及关于 Credential Manager 和通行密钥的博文

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

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 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

为了打造更加标准化的屏幕截图检测体验,Android 14 引入了可保护隐私的屏幕截图检测 API。借助此 API,应用可以按 activity 注册回调。如果用户在该 activity 可见时截取屏幕截图,系统会调用这些回调并通知用户。

Experiência do usuário

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

O Android 14 atualiza o Sharesheet do sistema para oferecer suporte a ações personalizadas do app e resultados de visualização mais informativos para os usuários.

Adicionar ações personalizadas

Com o Android 14, o app pode adicionar ações personalizadas ao Sharesheet do sistema que invoca.

Captura de tela das ações personalizadas no Sharesheet.

Melhorar a classificação dos alvos de compartilhamento direto

O Android 14 usa mais indicadores de apps para determinar a classificação dos alvos de compartilhamento diretos a fim de apresentar resultados mais úteis para o usuário. Para fornecer o indicador mais útil para a classificação, siga as orientações para melhorar a classificação das suas segmentações de compartilhamento direto. Os apps de comunicação também podem informar o uso de atalhos para mensagens enviadas e recebidas.

Linha de compartilhamento direto na planilha, conforme mostrado por 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

按应用替换会更改大屏设备上应用的行为。例如,无论应用的配置如何,OVERRIDE_MIN_ASPECT_RATIO_LARGE 设备制造商替换项都会将应用宽高比设置为 16:9。

Android 14 QPR1 允许用户在大屏设备上通过新的设置菜单应用按应用替换项。

Compartilhamento de tela de 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 的 Path API 是一种强大且灵活的机制,可用于创建和渲染矢量图形,能够描边或填充路径,根据线段、二次曲线或立方曲线构建路径,执行布尔运算以获取更复杂的形状,或同时执行所有这些操作。不过,您无法找出 Path 对象中实际包含的内容;该对象的内部信息在创建后对于调用方是不透明的。

如需创建 Path,您可以调用 moveTo()lineTo()cubicTo() 等方法来添加路径片段。但是,无法询问该路径有哪些段,因此您必须在创建时保留该信息。

从 Android 14 开始,您可以查询路径以了解其内部内容。首先,您需要使用 Path.getPathIterator API 获取 PathIterator 对象:

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

接下来,您可以调用 PathIterator 逐个遍历片段,并检索每个片段的所有必要数据。以下示例使用了 PathIterator.Segment 对象,它会为您打包数据:

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 还有一个非分配版 next(),您可以在其中传入缓冲区来保存点数据。

查询 Path 数据的一个重要用例是插值。例如,您可能想在两个不同的路径之间添加动画(或变形)。为了进一步简化该用例,Android 14 还在 Path 中添加了 interpolate() 方法。假设两个路径具有相同的内部结构,interpolate() 方法会使用该插值结果创建一个新的 Path。以下示例返回了形状介于 pathotherPath 之间的一半(线性插值为 0 .5)的路径:

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

Jetpack graphics-path 库也为早期版本的 Android 启用了类似的 API。

Malhas personalizadas com sombreadores de vértice e fragmento

Android 长期支持绘制具有自定义着色的三角形网格,但输入网格格式被限制为几种预定义的属性组合。Android 14 增加了对自定义网格的支持,自定义网格可定义为三角形三角形带,并且可以视需要编入索引。这些网格通过自定义属性、顶点步长、转换以及用 AGSL 编写的顶点和片段着色器指定

顶点着色器定义变化,例如位置和颜色,而 fragment 着色器可以选择定义像素的颜色,通常通过使用顶点着色器创建的变化。如果 fragment 着色器提供了颜色,则它会使用绘制网格时选择的混合模式与当前的 Paint 颜色混合。您可以将 uniform 传递到 fragment 和顶点着色器中,以提高灵活性。

Renderizador de buffer de hardware para o Canvas

为协助使用 Android 的 Canvas API 通过硬件加速在 HardwareBuffer 中进行绘制,Android 14 引入了 HardwareBufferRenderer。当您的用例涉及通过 SurfaceControl 与系统合成器进行通信以实现低延迟绘制时,此 API 特别有用。