Descripción general de las funciones y API

Android 14 incluye excelentes funciones y APIs para desarrolladores. La siguiente información te ayudará a obtener información sobre las funciones de tus apps y a comenzar a usar las APIs relacionadas.

Para obtener una lista detallada de las APIs agregadas, modificadas y quitadas, consulta el informe de diferencias de API. Para obtener detalles sobre las APIs agregadas, consulta la referencia de la API de Android. En el caso de Android 14, busca las APIs que se agregaron en el nivel de API 34. Para conocer las áreas en las que los cambios de la plataforma podrían afectar a tus apps, asegúrate de revisar los cambios en el comportamiento de Android 14 para apps orientadas a Android 14 y para todas las apps.

Internacionalización

Preferencias de idioma de las apps

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 the LocaleConfig file 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 the res folders of your app modules and any library module dependencies to determine the locales to include in the LocaleConfig file.

  • Dynamic updates for an app's localeConfig: Use the setOverrideLocaleConfig() and getOverrideLocaleConfig() methods in LocaleManager to 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 de Grammatical Inflection

Tres mil millones de personas hablan idiomas con género, es decir, idiomas en los que las categorías gramaticales, como sustantivos, verbos, adjetivos y preposiciones, inflexionan según el género de las personas y los objetos con las que te comunicas o sobre los que hablas. Tradicionalmente, muchos idiomas con género usan el género gramatical masculino como el género predeterminado o genérico.

Dirigirse a usuarios con un género gramatical incorrecto, por ejemplo, a mujeres con género gramatical masculino, puede tener un impacto negativo en su rendimiento y actitud. Por el contrario, una IU con un lenguaje que refleja, de forma correcta, el género gramatical del usuario puede mejorar su participación y proporcionar una experiencia más personalizada y más 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.

Preferencias regionales

Las preferencias regionales permiten que los usuarios personalicen las unidades de temperatura, el primer día de la semana y los sistemas de numeración. Una persona europea que vive en los Estados Unidos podría preferir que las unidades de temperatura estén en Celsius en lugar de Fahrenheit y que las apps consideren el lunes como comienzo de la semana en lugar de los domingos, la opción predeterminada en EE.UU.

Los nuevos menús de configuración de Android para estas preferencias les proporcionan a los usuarios una ubicación detectable y centralizada para cambiar las preferencias de las apps. Estas preferencias también se mantienen en copias de seguridad y restablecimientos. Varias APIs y algunos intents, como getTemperatureUnit y getFirstDayOfWeek, le otorgan a tu app acceso de lectura a las preferencias de los usuarios, por lo que tu app puede ajustar la forma en que muestra la información. También puedes registrar un BroadcastReceiver en ACTION_LOCALE_CHANGED para controlar los cambios de configuración regional cuando cambien las preferencias regionales.

Para encontrar esta configuración, abre la app de Configuración y dirígete a Sistema > Idiomas y entrada > Preferencias regionales.

Pantalla de preferencias regionales en la configuración del sistema Android.
Opciones de temperatura para preferencias regionales en el sistema Android configuración.

Accesibilidad

Escalamiento de fuente no lineal al 200%

A partir de Android 14, el sistema admite el escalamiento de fuente hasta el 200%, lo que les brinda a los usuarios con visión reducida opciones de accesibilidad adicionales que se alinean con las Pautas de Accesibilidad al Contenido Web (WCAG).

Para evitar que los elementos de texto grandes en la pantalla escalen demasiado, el sistema aplica una curva de escalamiento no lineal. Esta estrategia de escalamiento implica que el texto grande no escala a la misma velocidad que uno más pequeño. El escalamiento de fuente no lineal ayuda a preservar la jerarquía proporcional entre elementos de diferentes tamaños, a la vez que mitiga los problemas con el escalamiento lineal de texto en grados altos (como el texto cortado o el texto que se vuelve más difícil de leer debido a su gran tamaño de visualización).

Prueba tu app con escalamiento de fuente no lineal

Habilita el tamaño máximo de fuente en la configuración de accesibilidad de un dispositivo para probar tu app.

Si ya usas unidades de píxeles ajustados (sp) para definir el tamaño del texto, estas opciones adicionales y mejoras de escala se aplican automáticamente al texto de tu app. Sin embargo, debes realizar pruebas de la IU con el tamaño máximo de fuente habilitado (200%) para asegurarte de que tu app aplique los tamaños de fuente correctamente y pueda adaptarse a tamaños de fuente más grandes sin afectar la usabilidad.

Para habilitar el tamaño de la fuente al 200%, sigue estos pasos:

  1. Abre la app de Configuración y dirígete a Accesibilidad > Tamaño y texto de la pantalla.
  2. En la opción Tamaño de fuente, presiona el ícono de signo más (+) hasta que se habilite la configuración de tamaño máximo de fuente, como se muestra en la imagen que acompaña esta sección.

Usa unidades de píxeles ajustados (sp) para los tamaños de texto

Recuerda siempre especificar los tamaños de texto en unidades de sp. Cuando tu app usa unidades de sp, Android puede aplicar el tamaño de texto preferido del usuario y escalarlo de forma adecuada.

No uses unidades de sp para el padding ni definas alturas de las vistas suponiendo padding implícito: con el escalamiento de fuente no lineal, las dimensiones de sp podrían no ser proporcionales, por lo que 4 sp + 20 sp podría no ser igual a 24 sp.

Convierte unidades de píxeles ajustados (sp)

Usa TypedValue.applyDimension() para convertir unidades de sp en píxeles y TypedValue.deriveDimension() para convertir píxeles en sp. Estos métodos aplican automáticamente la curva de escalamiento no lineal adecuada.

Evita codificar la ecuación mediante Configuration.fontScale o DisplayMetrics.scaledDensity. Como el escalamiento de fuente no es lineal, el campo scaledDensity ya no es preciso. El campo fontScale debe usarse solo con fines informativos, porque las fuentes ya no se escalan con un solo valor escalar.

Usa unidades de sp para lineHeight

Define siempre android:lineHeight con unidades de sp en lugar de dp para que la altura de la línea se escale junto con el texto. De lo contrario, si tu texto es sp, pero tu lineHeight está en dp o px, no se escala y parece apretado. TextView corrige automáticamente el lineHeight para que se conserven las proporciones previstas, pero solo si textSize y lineHeight se definen en unidades sp.

Cámara y contenido multimedia

Ultra HDR para imágenes

Una ilustración de la calidad de imagen del rango dinámico estándar (SDR) en comparación con el alto rango dinámico (HDR).

Android 14 agrega compatibilidad con imágenes de alto rango dinámico (HDR) que retienen más información del sensor cuando se toma una foto, lo que permite colores vivos y un mayor contraste. Android usa el formato Ultra HDR, que es totalmente retrocompatible con las imágenes JPEG, lo que permite que las apps interactúen sin problemas con las imágenes HDR y las muestren en rango dinámico estándar (SDR) según sea necesario.

El framework renderiza estas imágenes en la IU en HDR de forma automática cuando tu app habilita el uso de la IU HDR para su ventana de actividad, ya sea a través de una entrada de manifiesto o en el tiempo de ejecución mediante una llamada a Window.setColorMode(). También puedes capturar imágenes estáticas Ultra HDR comprimidas en dispositivos compatibles. Con más colores recuperados del sensor, la edición posterior puede ser más flexible. El Gainmap asociado con las imágenes Ultra HDR se puede usar para renderizarlas con OpenGL o Vulkan.

Zoom, enfoque, vista posterior y mucho más en las extensiones de cámara

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:

Zoom en el 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.

Audio USB sin pérdida

Android 14 gains support for lossless audio formats for audiophile-level experiences over USB wired headsets. You can query a USB device for its preferred mixer attributes, register a listener for changes in preferred mixer attributes, and configure mixer attributes using the AudioMixerAttributes class. This class represents the format, such as channel mask, sample rate, and behavior of the audio mixer. The class allows for audio to be sent directly, without mixing, volume adjustment, or processing effects.

Productividad y herramientas para desarrolladores

Credential Manager

Android 14 agrega Credential Manager como una API de la plataforma, con compatibilidad adicional con dispositivos Android 4.4 (nivel de API 19) a través de una biblioteca de Jetpack que usa los Servicios de Google Play. El objetivo de Credential Manager es facilitar el acceso de los usuarios con APIs que recuperan y almacenan credenciales con proveedores de credenciales configurados por el usuario. El Administrador de credenciales admite varios métodos de acceso, como nombres de usuario y contraseñas, llaves de acceso y soluciones de acceso federado (como Acceder con Google) en una sola API.

Las llaves de acceso ofrecen muchas ventajas. Por ejemplo, las llaves de acceso se basan en estándares de la industria, pueden funcionar en diferentes sistemas operativos y ecosistemas de navegadores, y se pueden usar con sitios web y apps.

Para obtener más información, consulta la documentación de Credential Manager y las llaves de acceso y la entrada de blog sobre Credential Manager y las llaves de acceso.

Health Connect

Health Connect es un repositorio integrado en el dispositivo para los datos de salud y fitness del usuario. Permite a los usuarios compartir datos entre sus apps favoritas, con un solo lugar para controlar qué datos quieren compartir con estas apps.

En dispositivos con versiones de Android anteriores a Android 14, Health Connect está disponible para descargarse como app en Google Play Store. A partir de Android 14, Health Connect forma parte de la plataforma y recibe actualizaciones a través de las actualizaciones del sistema de Google Play sin necesidad de una descarga independiente. Con esto, Health Connect se puede actualizar con frecuencia, y tus apps pueden depender de que Health Connect esté disponible en dispositivos que ejecutan Android 14 o versiones posteriores. Los usuarios pueden acceder a Health Connect desde la configuración de su dispositivo, con controles de privacidad integrados en la configuración del sistema.

Los usuarios pueden comenzar a usar Health Connect sin descargar una app independiente en dispositivos que ejecutan Android 14 o versiones posteriores.
Los usuarios pueden controlar qué apps tienen acceso a sus datos de salud y fitness a través de la configuración del sistema.

Health Connect incluye varias funciones nuevas en Android 14, como las rutas de ejercicio, que permiten a los usuarios compartir una ruta de su entrenamiento que se puede visualizar en un mapa. Una ruta se define como una lista de ubicaciones guardadas dentro de un período, y tu app puede insertar rutas en sesiones de ejercicio y vincularlas. Para garantizar que los usuarios tengan un control total sobre estos datos sensibles, deben permitir compartir rutas individuales con otras apps.

Para obtener más información, consulta la documentación de Health Connection y la entrada de blog sobre Novedades de Android Health.

Actualizaciones de 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.

Mejoras para tiendas de aplicaciones

Android 14 introduce varias APIs de PackageInstaller que permiten que las tiendas de aplicaciones mejoren la experiencia del usuario.

Solicita aprobación para la instalación antes de realizar la descarga

La instalación o actualización de una app puede requerir aprobación del usuario. Por ejemplo, cuando un instalador que usa el permiso REQUEST_INSTALL_PACKAGES intenta instalar una app nueva. En versiones anteriores de Android, las tiendas de aplicaciones solo pueden solicitar la aprobación del usuario después de que se escriben los APK en la sesión de instalación y esta está confirmada.

A partir de Android 14, el método requestUserPreapproval() les permite a los instaladores solicitar la aprobación del usuario antes de confirmar la sesión de instalación. Esta mejora permite que una tienda de aplicaciones aplace la descarga de cualquier APK hasta que el usuario haya aprobado la instalación. Además, una vez que un usuario aprobó la instalación, la tienda de aplicaciones puede descargarla e instalarla en segundo plano sin interrumpir al usuario.

Reclama la responsabilidad de las actualizaciones futuras

El método setRequestUpdateOwnership() permite que un instalador le indique al sistema que tiene la responsabilidad de las actualizaciones futuras de una app que instala. Esta función permite actualizar la aplicación forzosa de la propiedad, es decir, que solo el propietario de la actualización puede instalar actualizaciones automáticas en la app. La aplicación forzosa de la actualización de la propiedad ayuda a garantizar que los usuarios reciban actualizaciones solo desde la tienda de aplicaciones prevista.

Cualquier otro instalador, incluidos los que usan el permiso INSTALL_PACKAGES, deben recibir la aprobación explícita del usuario para instalar una actualización. Si un usuario decide continuar con la actualización desde otra fuente, la propiedad de esta se perderá.

Actualiza las apps en momentos menos disruptivos

Por lo general, las tiendas de aplicaciones quieren evitar actualizar una app que está en uso de forma activa, ya que esto produce que se finalicen los procesos en ejecución de la app, lo que podría interrumpir lo que el usuario estaba haciendo.

A partir de Android 14, la API de InstallConstraints les brinda a los instaladores una forma de garantizar que las actualizaciones de apps se realicen en un momento oportuno. Por ejemplo, una tienda de aplicaciones puede llamar al método commitSessionAfterInstallConstraintsAreMet() para asegurarse de que una actualización solo se confirme cuando el usuario ya no interactúa con la app en cuestión.

Instala divisiones opcionales sin inconvenientes

Con los APK divididos, las funciones de una app se pueden entregar en archivos APK separados, en lugar de un APK monolítico. Los APK divididos permiten que las tiendas de aplicaciones optimicen la entrega de diferentes componentes de las apps. Por ejemplo, las tiendas de aplicaciones pueden realizar optimizaciones en función de las propiedades del dispositivo de destino. La API de PackageInstaller es compatible con las divisiones desde su introducción en el nivel de API 22.

En Android 14, el método setDontKillApp() permite que un instalador indique que los procesos en ejecución de la app no deberían finalizar cuando se instalan nuevas divisiones. Las tiendas de aplicaciones pueden usar esta función para instalar funciones nuevas de una app sin inconvenientes mientras el usuario la usa.

Paquetes de metadatos de apps

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.

Detecta cuando los usuarios toman capturas de pantalla del 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.

Experiencia del usuario

Acciones personalizadas y clasificación mejorada de Sharesheet

Android 14 actualiza la hoja compartida del sistema para admitir acciones personalizadas de la app y resultados informativos de la versión preliminar para los usuarios.

Agrega acciones personalizadas

Con Android 14, tu app puede agregar acciones personalizadas a la hoja compartida del sistema que invoca.

Captura de pantalla de las acciones personalizadas en la hoja compartida.

Mejora la clasificación de los objetivos de Direct Share

Android 14 usa más indicadores de las apps para determinar la clasificación de los objetivos de Direct Share para proporcionarles resultados más útiles al usuario. Para proporcionar el indicador más útil para la clasificación, sigue las instrucciones para mejorar las clasificaciones de tus objetivos de Direct Share. Las apps de comunicación también pueden informar el uso de combinaciones de teclas para los mensajes entrantes y salientes.

Fila de uso compartido directo en la hoja compartida, como se muestra en 1

Compatibilidad con animaciones integradas y personalizadas para el gesto atrás predictivo

Video: Predictive back animations

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:

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.

Anulaciones por app del fabricante de dispositivos con pantalla grande

Las anulaciones por app permiten que los fabricantes de dispositivos cambien el comportamiento de las apps en dispositivos con pantallas grandes. Por ejemplo, la anulación FORCE_RESIZE_APP le indica al sistema que cambie el tamaño de la app para que se ajuste a las dimensiones de la pantalla (evitando el modo de compatibilidad de tamaño) incluso si se configuró resizeableActivity="false" en el manifiesto de la app.

Las anulaciones están diseñadas para mejorar la experiencia del usuario en pantallas grandes.

Las nuevas propiedades del manifiesto te permiten inhabilitar algunas anulaciones del fabricante de dispositivos para tu app.

Anulaciones por app para usuarios de pantallas 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.

Compartir pantalla de una 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.

Respuesta inteligente potenciada por LLM en Gboard en el 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

Las rutas de acceso son consultables y se pueden interpolar

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.

Mallas personalizadas con sombreadores de vértices y fragmentos

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 búfer 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.