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
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 arquivoLocaleConfig
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 pastasres
dos módulos do app e qualquer dependência de módulos de biblioteca para determinar as localidades que serão incluídas no arquivoLocaleConfig
.Atualizações dinâmicas para o
localeConfig
de um app: use os métodossetOverrideLocaleConfig()
egetOverrideLocaleConfig()
emLocaleManager
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
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%
Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).
To prevent large text elements on screen from scaling too large, the system applies a nonlinear scaling curve. This scaling strategy means that large text doesn't scale at the same rate as smaller text. Nonlinear font scaling helps preserve the proportional hierarchy between elements of different sizes while mitigating issues with linear text scaling at high degrees (such as text being cut off or text that becomes harder to read due to an extremely large display sizes).
Test your app with nonlinear font scaling
If you already use scaled pixels (sp) units to define text sizing, then these additional options and scaling improvements are applied automatically to the text in your app. However, you should still perform UI testing with the maximum font size enabled (200%) to ensure that your app applies the font sizes correctly and can accommodate larger font sizes without impacting usability.
To enable 200% font size, follow these steps:
- Open the Settings app and navigate to Accessibility > Display size and text.
- For the Font size option, tap the plus (+) icon until the maximum font size setting is enabled, as shown in the image that accompanies this section.
Use scaled pixel (sp) units for text-sizes
Remember to always specify text sizes in sp units. When your app uses sp units, Android can apply the user's preferred text size and scale it appropriately.
Don't use sp units for padding or define view heights assuming implicit padding: with nonlinear font scaling sp dimensions might not be proportional, so 4sp + 20sp might not equal 24sp.
Convert scaled pixel (sp) units
Use TypedValue.applyDimension()
to convert from sp units
to pixels, and use TypedValue.deriveDimension()
to
convert pixels to sp. These methods apply the appropriate nonlinear scaling
curve automatically.
Avoid hardcoding equations using
Configuration.fontScale
or
DisplayMetrics.scaledDensity
. Because font scaling is
nonlinear, the scaledDensity
field is no longer accurate. The fontScale
field should be used for informational purposes only because fonts are no longer
scaled with a single scalar value.
Use sp units for lineHeight
Always define android:lineHeight
using sp units instead
of dp, so the line height scales along with your text. Otherwise, if your text
is sp but your lineHeight
is in dp or px, it doesn't scale and looks cramped.
TextView automatically corrects the lineHeight
so that your intended
proportions are preserved, but only if both textSize
and lineHeight
are
defined in sp units.
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
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:
- A estimativa de latência do processamento de captura dinâmica fornece
estimativas de latência muito mais precisas com base no cenário atual e nas
condições do ambiente. Chame
CameraExtensionSession.getRealtimeStillCaptureLatency()
para receber um objetoStillCaptureLatency
que tenha dois métodos de estimativa de latência. O métodogetCaptureLatency()
retorna a latência estimada entreonCaptureStarted
eonCaptureProcessStarted()
, e o métodogetProcessingLatency()
retorna a latência estimada entreonCaptureProcessStarted()
e o frame processado final disponível. - Suporte a callbacks de progresso de captura para que os apps possam mostrar o progresso atual
de operações de processamento de longa duração em captura ainda. Você pode conferir
se esse recurso está disponível com
CameraExtensionCharacteristics.isCaptureProcessProgressAvailable
e, se estiver, implementar o callbackonCaptureProcessProgressed()
, que tem o progresso (de 0 a 100) transmitido como um parâmetro. Metadados específicos da extensão, como
CaptureRequest.EXTENSION_STRENGTH
, para indicar a quantidade de um efeito de extensão, como a quantidade de desfoque do plano de fundo comEXTENSION_BOKEH
.Recurso de pós-visualização para captura estática em extensões de câmera, que fornece uma imagem menos processada mais rapidamente do que a imagem final. Se uma extensão tiver aumentado a latência de processamento, uma imagem de pós-visualização poderá ser fornecida como um marcador de posição para melhorar a UX e alterada mais tarde para a imagem final. Confira se esse recurso está disponível com o
CameraExtensionCharacteristics.isPostviewAvailable
. Em seguida, você pode transmitir umOutputConfiguration
paraExtensionSessionConfiguration.setPostviewOutputConfiguration
.O suporte a
SurfaceView
, que permite um caminho de renderização de visualização mais otimizado e econômico.Suporte ao recurso "toque para focar" e aplicar zoom durante o uso da extensão.
Zoom no sensor
When REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE
in
CameraCharacteristics
contains
SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
, your app
can use advanced sensor capabilities to give a cropped RAW stream the same
pixels as the full field of view by using a CaptureRequest
with a RAW target that has stream use case set to
CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
.
By implementing the request override controls, the updated camera gives users
zoom control even before other camera controls are ready.
Á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
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
Android 14 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases, including both library updates and Java 17 language support for app and platform developers.
The following features and improvements are included:
- Updated approximately 300
java.base
classes to Java 17 support. - Text Blocks, which introduce multi-line string literals to the Java programming language.
- Pattern Matching for instanceof, which allows an object to
be treated as having a specific type in an
instanceof
without any additional variables. - Sealed classes, which allow you restrict which classes and interfaces can extend or implement them.
Thanks to Google Play system updates (Project Mainline), over 600 million devices are enabled to receive the latest Android Runtime (ART) updates that include these changes. This is part of our commitment to give apps a more consistent, secure environment across devices, and to deliver new features and capabilities to users independent of platform releases.
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
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
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.
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.
Suporte a animações de voltas preditivas integradas e personalizadas
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:
- Você pode configurar
android:enableOnBackInvokedCallback=true
para ativar as animações do sistema de volta preditiva por atividade em vez de para todo o app. - Adicionamos novas animações do sistema para acompanhar a animação de retorno à tela inicial do Android 13. As novas animações do sistema são entre atividades e tarefas, que são recebidas automaticamente após a migração para a volta preditiva.
- Adicionamos novas animações do componente Material Design para páginas inferiores, páginas laterais e pesquisa.
- Desenvolvemos orientações de design para a criação de transições e animações personalizadas no app.
- Adicionamos novas APIs para oferecer suporte a animações de transição personalizadas no app:
handleOnBackStarted
,handleOnBackProgressed
,handleOnBackCancelled
in
OnBackPressedCallback
onBackStarted
,onBackProgressed
,onBackCancelled
in
OnBackAnimationCallback
- Use
overrideActivityTransition
em vez deoverridePendingTransition
para transições que respondem à medida que o usuário desliza de volta.
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 se ajustar à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 o objetivo de melhorar a experiência do usuário em telas grandes.
As novas propriedades do manifesto permitem desativar algumas substituições de fabricantes de dispositivos 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, 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
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 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.
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
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 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.