Visão geral de recursos e APIs

O Android 14 introduz ótimos recursos e APIs para desenvolvedores. As seções a seguir ajudam você a conhecer os recursos disponíveis para os apps e a começar 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 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 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

O Android 14 expande os recursos de linguagem por app lançados no Android 13 (API de nível 33) com estes recursos extras:

  • Gerar automaticamente o localeConfig de um app: a partir do Android Studio Giraffe Canary 7 e do AGP 8.1.0-alpha07, é possível configurar seu app para oferecer suporte a seleção de idioma por app automaticamente. Com base nos recursos do projeto, o Plug-in do Android para Gradle gera o arquivo LocaleConfig e adiciona uma referência a ele no arquivo de manifesto final. Assim, não é mais necessário criar ou atualizar o arquivo manualmente. O AGP usa os recursos nas pastas res dos módulos do app e qualquer dependência de módulos de biblioteca para determinar as localidades que serão incluídas no arquivo LocaleConfig.

  • Atualizações dinâmicas para o localeConfig de um app: use os métodos setOverrideLocaleConfig() e getOverrideLocaleConfig() em LocaleManager para atualizar dinamicamente a lista de idiomas com suporte no app nas configurações do sistema do dispositivo. Use essa flexibilidade para personalizar a lista de idiomas com suporte por região, executar experimentos A/B ou fornecer uma lista atualizada de localidades se o app usar pushes do lado do servidor para localização.

  • Visibilidade do idioma do app para Editores de método de entrada (IMEs): os IMEs podem usar o método getApplicationLocales() para conferir o idioma do app atual e associar o idioma do IME a ele.

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 no sistema Android configurações.

Acessibilidade

Dimensionamento de fonte não linear para 200%

No Android 14 e mais recentes, o sistema oferece suporte ao dimensionamento de fontes de até 200%, dando aos usuários outras opções de acessibilidade.

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 fontes 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 para ler um texto devido a tamanhos muito grandes de tela.

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 escalonáveis (sp) para definir o tamanho do texto, essas opções adicionais e melhorias de escalonamento são aplicadas automaticamente ao texto no app. No entanto, ainda é necessário realizar testes de interface com o tamanho máximo de fonte ativado (200%) para garantir que o app aplique os tamanhos de fonte corretamente e possa acomodar tamanhos 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 seu app usa unidades sp, o Android pode aplicar o tamanho de texto preferencial do usuário e dimensioná-lo adequadamente.

Não use unidades de sp para preenchimento nem defina alturas de visualização presumindo preenchimento implícito: com o dimensionamento 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 deve ser usado apenas para fins informativos, porque as fontes não são mais dimensionadas 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 junto com o texto. Caso contrário, se o texto estiver em sp, mas o lineHeight estiver em dp ou px, ele não será dimensionado e vai parecer apertado. O TextView corrige automaticamente o lineHeight para que as proporções pretendidas sejam preservadas, mas apenas se textSize e lineHeight forem definidos em unidades sp.

Câmera e mídia

Ultra HDR para imagens

An illustration of Standard Dynamic Range (SDR) versus High Dynamic Range (HDR) image quality.

Android 14 adds support for High Dynamic Range (HDR) images that retain more of the information from the sensor when taking a photo, which enables vibrant colors and greater contrast. Android uses the Ultra HDR format, which is fully backward compatible with JPEG images, allowing apps to seamlessly interoperate with HDR images, displaying them in Standard Dynamic Range (SDR) as needed.

Rendering these images in the UI in HDR is done automatically by the framework when your app opts in to using HDR UI for its Activity Window, either through a manifest entry or at runtime by calling Window.setColorMode(). You can also capture compressed Ultra HDR still images on supported devices. With more colors recovered from the sensor, editing in post can be more flexible. The Gainmap associated with Ultra HDR images can be used to render them using OpenGL or Vulkan.

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

Android 14 升级并改进了相机扩展程序,让应用能够处理更长的处理时间,从而支持在受支持的设备上使用计算密集型算法(例如弱光摄影)来改善图片。这些功能可让用户在使用相机扩展功能时获得更出色的体验。这些改进的示例包括:

Zoom no sensor

CameraCharacteristics 中的 REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE 包含 SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 时,您的应用可以使用高级传感器功能,将剪裁后的 RAW 数据流的像素与全视野范围相同,方法是将 CaptureRequest 与将数据流用例设置为 CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 的 RAW 目标搭配使用。通过实现请求替换控件,更新后的相机可让用户在其他相机控件准备就绪之前使用缩放控件。

Áudio USB sem perdas

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

Produtividade e ferramentas para desenvolvedores

Credential Manager

O Android 14 adiciona o Gerenciador de credenciais como uma API de plataforma, com suporte adicional para dispositivos Android 4.4 (nível 19 da API) e versões mais recentes por meio de uma biblioteca do Jetpack que usa o Google Play Services. O Gerenciador de credenciais tem como objetivo facilitar o login para os 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 em padrões do setor, podem funcionar em diferentes sistemas operacionais e ecossistemas de navegadores e podem ser usadas em sites e apps.

Para mais informações, consulte a documentação do Credential Manager e das chaves de acesso e a postagem do blog sobre o Credential Manager e as chaves de acesso.

Conexão Saúde

A Conexão Saúde é um repositório no dispositivo para dados de saúde e condicionamento físico do usuário. Ele permite que os usuários compartilhem dados entre os apps favoritos, com um único lugar para controlar quais dados eles querem compartilhar com esses apps.

Em dispositivos com versões anteriores ao Android 14, o app Conexão Saúde está disponível para download na Google Play Store. A partir do Android 14, a Conexão Saúde faz parte da plataforma e recebe atualizações por meio das atualizações do sistema do Google Play sem precisar de um download separado. Com isso, a Conexão Saúde pode ser atualizada com frequência, e seus apps podem contar com a Conexão Saúde disponível em dispositivos com o Android 14 ou mais recente. Os usuários podem acessar a Conexão Saúde nas configurações do dispositivo, com controles de privacidade integrados às configurações do sistema.

Os usuários podem começar a usar o app Conexão Saúde sem fazer o download de um app separado em dispositivos com o Android 14 ou mais recente.
Os usuários podem controlar quais apps têm acesso aos dados de saúde e condicionamento físico nas configurações do sistema.

A Conexão Saúde inclui vários novos recursos no Android 14, como rotas de exercícios, permitindo que os usuários compartilhem uma rota do treino que pode ser visualizada em um mapa. Uma rota é definida como uma lista de locais salvos em um período de tempo, e o app pode inserir rotas em sessões de exercício, vinculando-as uma à outra. Para garantir que os usuários tenham controle total sobre esses dados sensíveis, eles precisam permitir o compartilhamento de rotas individuais com outros apps.

Para mais informações, consulte a documentação da Conexão Saúde e a postagem do blog Novidades no 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

Android 14 introduces several PackageInstaller APIs that allow app stores to improve their user experience.

Request install approval before downloading

Installing or updating an app might require user approval. For example, when an installer making use of the REQUEST_INSTALL_PACKAGES permission attempts to install a new app. In prior Android versions, app stores can only request user approval after APKs are written to the install session and the session is committed.

Starting with Android 14, the requestUserPreapproval() method lets installers request user approval before committing the install session. This improvement lets an app store defer downloading any APKs until after the installation has been approved by the user. Furthermore, once a user has approved installation, the app store can download and install the app in the background without interrupting the user.

Claim responsibility for future updates

The setRequestUpdateOwnership() method allows an installer to indicate to the system that it intends to be responsible for future updates to an app it is installing. This capability enables update ownership enforcement, meaning that only the update owner is permitted to install automatic updates to the app. Update ownership enforcement helps to ensure that users receive updates only from the expected app store.

Any other installer, including those making use of the INSTALL_PACKAGES permission, must receive explicit user approval in order to install an update. If a user decides to proceed with an update from another source, update ownership is lost.

Update apps at less-disruptive times

App stores typically want to avoid updating an app that is actively in use because this leads to the app's running processes being killed, which potentially interrupts what the user was doing.

Starting with Android 14, the InstallConstraints API gives installers a way to ensure that their app updates happen at an opportune moment. For example, an app store can call the commitSessionAfterInstallConstraintsAreMet() method to make sure that an update is only committed when the user is no longer interacting with the app in question.

Seamlessly install optional splits

With split APKs, features of an app can be delivered in separate APK files, rather than as a monolithic APK. Split APKs allow app stores to optimize the delivery of different app components. For example, app stores might optimize based on the properties of the target device. The PackageInstaller API has supported splits since its introduction in API level 22.

In Android 14, the setDontKillApp() method allows an installer to indicate that the app's running processes shouldn't be killed when new splits are installed. App stores can use this feature to seamlessly install new features of an app while the user is using the app.

Pacotes de metadados do app

从 Android 14 开始,Android 软件包安装程序可让您指定应用元数据(例如数据安全做法),以在 Google Play 等应用商店页面上架。

Detectar quando usuários fazem capturas de tela no dispositivo

To create a more standardized experience for detecting screenshots, Android 14 introduces a privacy-preserving screenshot detection API. This API lets apps register callbacks on a per-activity basis. These callbacks are invoked, and the user is notified, when the user takes a screenshot while that activity is visible.

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 ele invoca.

Captura de tela de ações personalizadas na página de compartilhamento.

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 dos seus alvos de compartilhamento direto. Os apps de comunicação também podem informar o uso de atalhos para mensagens de entrada e saída.

Linha de compartilhamento direto na página de compartilhamento, conforme mostrado em 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 dos apps em dispositivos de tela grande. Por exemplo, a substituição FORCE_RESIZE_APP instrui o sistema a redimensionar o app para que 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.

As substituições têm como objetivo 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 por app para usuários de telas grandes

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

借助 Android 14 QPR1,用户可以在大屏设备上通过新的设置菜单应用按应用替换项。

Compartilhamento de tela de app

O compartilhamento de tela de apps permite que os usuários compartilhem uma janela de app em vez de toda a tela 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 tela compartilhada. Somente o conteúdo do app selecionado é compartilhado.

O compartilhamento de tela de apps melhora a produtividade e a privacidade, permitindo que os usuários executem vários apps, mas limitem o compartilhamento de conteúdo a um único app.

Resposta inteligente com tecnologia de LLM no Gboard do Pixel 8 Pro

On Pixel 8 Pro devices with the December Feature Drop, developers can try out higher-quality smart replies in Gboard powered by on-device Large Language Models (LLMs) running on Google Tensor.

This feature is available as a limited preview for US English in WhatsApp, Line, and KakaoTalk. It requires using a Pixel 8 Pro device with Gboard as your keyboard.

To try it out, first enable the feature in Settings > Developer Options > AiCore Settings > Enable Aicore Persistent.

Next, open a conversation in a supported app to see LLM-powered Smart Reply in Gboard's suggestion strip in response to incoming messages.

Gboard utilizes on-device LLMs to provide higher-quality smart replies.

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 shaders de vértice e fragmento

Android 长期以来一直支持使用自定义着色绘制三角网格,但输入网格格式仅限于一些预定义的属性组合。Android 14 增加了对自定义网格的支持,可将其定义为三角形三角形条,并且可以选择是否编入索引。这些网格是使用自定义属性、顶点步长、可变以及使用 AGSL 编写的顶点着色器和片段着色器指定的。

顶点着色器定义了位置和颜色等变量,而片段着色器可以选择为像素定义颜色,通常是使用顶点着色器创建的变量。如果片段着色器提供颜色,则系统会使用绘制网格时选择的混合模式将其与当前 Paint 颜色混合。Uniform 可以传递到片段着色器和顶点着色器,以提高灵活性。

Renderizador de buffer de hardware para Canvas

To assist in using Android's Canvas API to draw with hardware acceleration into a HardwareBuffer, Android 14 introduces HardwareBufferRenderer. This API is particularly useful when your use case involves communication with the system compositor through SurfaceControl for low-latency drawing.