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 mais 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 expands on the per-app language features that were introduced in Android 13 (API level 33) with these additional capabilities:
Automatically generate an app's
localeConfig: Starting with Android Studio Giraffe Canary 7 and AGP 8.1.0-alpha07, you can configure your app to support per-app language preferences automatically. Based on your project resources, the Android Gradle plugin generates theLocaleConfigfile and adds a reference to it in the final manifest file, so you no longer have to create or update the file manually. AGP uses the resources in theresfolders of your app modules and any library module dependencies to determine the locales to include in theLocaleConfigfile.Dynamic updates for an app's
localeConfig: Use thesetOverrideLocaleConfig()andgetOverrideLocaleConfig()methods inLocaleManagerto dynamically update your app's list of supported languages in the device's system settings. Use this flexibility to customize the list of supported languages per region, run A/B experiments, or provide an updated list of locales if your app utilizes server-side pushes for localization.App language visibility for input method editors (IMEs): IMEs can utilize the
getApplicationLocales()method to check the language of the current app and match the IME language to that language.
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.
To help you build a user-centric UI for gendered languages, Android 14 introduces the Grammatical Inflection API, which lets you add support for grammatical gender without refactoring your app.
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.
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
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:
- Abra o app Configurações e navegue até Acessibilidade > Texto e tamanho de exibição.
- 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
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 upgrades and improves camera extensions, allowing apps to handle longer processing times, which enables improved images using compute-intensive algorithms like low-light photography on supported devices. These features give users an even more robust experience when using camera extension capabilities. Examples of these improvements include:
- Dynamic still capture processing latency estimation provides much more
accurate still capture latency estimates based on the current scene and
environment conditions. Call
CameraExtensionSession.getRealtimeStillCaptureLatency()to get aStillCaptureLatencyobject that has two latency estimation methods. ThegetCaptureLatency()method returns the estimated latency betweenonCaptureStartedandonCaptureProcessStarted(), and thegetProcessingLatency()method returns the estimated latency betweenonCaptureProcessStarted()and the final processed frame being available. - Support for capture progress callbacks so that apps can display the current
progress of long-running, still-capture processing operations. You can check
if this feature is available with
CameraExtensionCharacteristics.isCaptureProcessProgressAvailable, and if it is, you implement theonCaptureProcessProgressed()callback, which has the progress (from 0 to 100) passed in as a parameter. Extension specific metadata, such as
CaptureRequest.EXTENSION_STRENGTHfor dialing in the amount of an extension effect, such as the amount of background blur withEXTENSION_BOKEH.Postview Feature for Still Capture in camera extensions, which provides a less-processed image more quickly than the final image. If an extension has increased processing latency, a postview image could be provided as a placeholder to improve UX and switched out later for the final image. You can check if this feature is available with
CameraExtensionCharacteristics.isPostviewAvailable. Then you can pass anOutputConfigurationtoExtensionSessionConfiguration.setPostviewOutputConfiguration.Support for
SurfaceViewallowing for a more optimized and power-efficient preview render path.Support for tap to focus and zoom during extension usage.
Zoom no sensor
Quando REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE em
CameraCharacteristics contém
SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, o app
pode usar recursos avançados do sensor para fornecer a um fluxo RAW cortado os mesmos
pixels do campo de visão completo usando um CaptureRequest
com um destino RAW que tenha o caso de uso do fluxo 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
o controle de zoom antes mesmo que outros controles da câmera estejam prontos.
Áudio USB sem perdas
O Android 14 oferece suporte a formatos de áudio sem perda para experiências
de áudio de alta qualidade com fones de ouvido com fio USB. É possível consultar um dispositivo USB para saber os
atributos de mixer preferidos, registrar um listener para mudanças nos atributos
de mixer preferidos e configurar atributos de mixer usando a
classe AudioMixerAttributes. Essa classe representa o
formato, como máscara de canal, taxa de amostragem e 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
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 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.
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.baseforam 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
instanceofsem 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 que usa 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.
A partir do Android 14, 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 propriedade
da atualização, ou seja, apenas o proprietário da atualização pode
instalar atualizações automáticas no app. A aplicação da propriedade da atualização 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.
A partir do Android 14, 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ó será 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 a
apresentação 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
Starting in Android 14, the Android package installer lets you specify app metadata, such as data safety practices, to include on app store pages such as 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.
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.
Suporte a animações de voltas preditivas integradas e personalizadas
Android 13 introduced the predictive back-to-home animation behind a developer option. When used in a supported app with the developer option enabled, swiping back shows an animation indicating that the back gesture exits the app back to the home screen.
Android 14 includes multiple improvements and new guidance for Predictive Back:
- You can set
android:enableOnBackInvokedCallback=trueto opt in to predictive back system animations per-Activity instead of for the entire app. - We've added new system animations to accompany the back-to-home animation from Android 13. The new system animations are cross-activity and cross-task, which you get automatically after migrating to Predictive Back.
- We've added new Material Component animations for Bottom sheets, Side sheets, and Search.
- We've created design guidance for creating custom in-app animations and transitions.
- We've added new APIs to support custom in-app transition animations:
handleOnBackStarted,handleOnBackProgressed,handleOnBackCancelledinOnBackPressedCallbackonBackStarted,onBackProgressed,onBackCancelledinOnBackAnimationCallback- Use
overrideActivityTransitioninstead ofoverridePendingTransitionfor transitions that respond as the user swipes back.
With this Android 14 preview release, all features of Predictive Back remain behind a developer option. See the developer guide to migrate your app to predictive back, as well as the developer guide to creating custom in-app transitions.
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
Per-app overrides change the behavior of apps on large screen devices. For example, the OVERRIDE_MIN_ASPECT_RATIO_LARGE device manufacturer override sets the app aspect ratio to 16:9 regardless of the app's configuration.
Android 14 QPR1 enables users to apply per‑app overrides by means of a new settings menu on large screen devices.
Compartilhamento de tela de app
App screen sharing enables users to share an app window instead of the entire device screen during screen content recording.
With app screen sharing, the status bar, navigation bar, notifications, and other system UI elements are excluded from the shared display. Only the content of the selected app is shared.
App screen sharing improves productivity and privacy by enabling users to run multiple apps but limit content sharing to a single app.
Resposta inteligente com tecnologia de LLM no Gboard do Pixel 8 Pro
Em dispositivos Pixel 8 Pro com a versão de dezembro, os desenvolvedores podem testar respostas inteligentes de maior qualidade no Gboard com modelos de linguagem grandes (LLMs) no dispositivo em execução no Google Tensor.
Esse recurso está disponível como uma prévia limitada para o inglês dos EUA no WhatsApp, no Line e no KakaoTalk. É necessário usar um dispositivo Pixel 8 Pro com o Gboard como teclado.
Para testar, primeiro ative o recurso em Configurações > Opções do desenvolvedor > Configurações do AICore > Ativar o AICore persistente.
Em seguida, abra uma conversa em um app compatível para conferir a resposta inteligente com LLM na faixa de sugestões do Gboard em resposta às mensagens recebidas.
Gráficos
Os caminhos podem ser consultados e interpolados
A API Path do Android é um mecanismo avançado 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, realizar
operações booleanas para conseguir formas ainda mais complexas ou todas essas
formas simultaneamente. Uma limitação é a capacidade de descobrir o que está
presente em um objeto de caminho. Os componentes internos do objeto são opacos para autores de chamadas
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á uma maneira de 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() em 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 shaders de vértice e fragmento
Android has long supported drawing triangle meshes with custom shading, but the input mesh format has been limited to a few predefined attribute combinations. Android 14 adds support for custom meshes, which can be defined as triangles or triangle strips, and can, optionally, be indexed. These meshes are specified with custom attributes, vertex strides, varying, and vertex and fragment shaders written in AGSL.
The vertex shader defines the varyings, such as position and color, while the
fragment shader can optionally define the color for the pixel, typically by
using the varyings created by the vertex shader. If color is provided by the
fragment shader, it is then blended with the current Paint
color using the blend mode selected when
drawing the mesh. Uniforms can be passed
into the fragment and vertex shaders for additional flexibility.
Renderizador de buffer de hardware para Canvas
Para ajudar no uso da API Canvas do Android para desenhar com
aceleração de hardware em um HardwareBuffer, Android 14
apresenta o HardwareBufferRenderer. Essa API é
particularmente útil quando seu caso de uso envolve a comunicação com o compositor
do sistema usando SurfaceControl para renderização
de baixa latência.