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.

为帮助您针对区分性别的语言构建以用户为中心的界面,Android 14 引入了 Grammatical Inflection API,让您无需重构应用便能添加对语法性别的支持。

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%

从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍选项。

为防止屏幕上的大文本元素放大过大,系统会采用非线性放大曲线。这种放大策略意味着大号文本的放大比例不会与较小的文本相同。非线性字体缩放有助于保持不同大小元素之间的比例层次结构,同时缓解高级别线性文本缩放的问题(例如文本被截断或文本因超大显示大小而难以阅读)。

使用非线性字体放大测试应用

在设备的无障碍设置中启用最大字号,以测试应用。

如果您已经使用放大像素 (sp) 单位来定义文本大小,那么这些额外的选项和缩放改进会自动应用于应用中的文本。但是,您仍然应该在启用最大字体大小 (200%) 的情况下执行界面测试,以确保应用正确应用字体大小,并且可以适应更大的字体大小,而不影响易用性。

要启用 200% 字号,请按以下步骤操作:

  1. 打开“设置”应用,然后依次前往无障碍 > 显示大小和文字
  2. 字号选项中,点按加号 (+) 图标,直到启用最大字号设置,如本部分随附的图片所示。

针对文本大小使用放大像素 (sp) 单位

请务必始终以 sp 为单位指定文本大小。当应用使用 sp 单位时,Android 可以应用用户的首选文本大小并相应地缩放。

不要为内边距使用 sp 单位,也不假设隐式内边距定义视图高度:使用非线性字体缩放 sp 尺寸可能不成比例,因此 4sp + 20sp 可能不等于 24sp。

转换放大像素 (sp) 单位

使用 TypedValue.applyDimension() 从 sp 单位转换为像素,并使用 TypedValue.deriveDimension() 将像素转换为 sp。这些方法会自动应用适当的非线性缩放曲线。

避免使用 Configuration.fontScaleDisplayMetrics.scaledDensity 对方程进行硬编码。由于字体缩放是非线性的,因此 scaledDensity 字段不再准确。fontScale 字段应仅用于提供信息,因为字体不再使用单个标量值进行缩放。

对 lineHeight 使用 sp 单位

始终使用 sp 单位(而非 dp)定义 android:lineHeight,以便行高随文本一起缩放。否则,如果您的文本为 sp,而 lineHeight 以 dp 或 px 为单位,则文本无法缩放且看起来狭窄。TextView 会自动更正 lineHeight 以保留您预期的比例,但前提是以 sp 为单位同时定义 textSizelineHeight

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 actualiza y mejora las extensiones de la cámara, lo que permite que las apps manejen tiempos de procesamiento más largos, lo que permite mejorar las imágenes con algoritmos intensivos en procesamiento, como la fotografía con poca luz en dispositivos compatibles. Estas funciones les brindan a los usuarios una experiencia aún más sólida cuando usan las funciones de extensión de la cámara. Entre los ejemplos de estas mejoras, se incluyen los siguientes:

Zoom en el 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 目标搭配使用。通过实现请求替换控件,更新后的相机可让用户在其他相机控件准备就绪之前使用缩放控件。

Audio USB sin pérdida

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

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 是用户健康与健身数据的设备端仓库。借助该功能,用户可以在一个位置控制要与这些应用共享哪些数据,并在自己喜爱的应用之间共享数据。

在搭载 Android 14 之前的 Android 版本的设备上,Health Connect 可作为应用从 Google Play 商店下载。从 Android 14 开始,Health Connect 将成为 Android 平台的一部分,并通过 Google Play 系统更新接收更新,而无需单独下载。这样一来,Health Connect 就可以频繁更新,您的应用可以依赖于搭载 Android 14 或更高版本的设备上提供的 Health Connect。用户可以通过设备的“设置”访问 Health Connect,隐私控制功能集成到系统设置中。

用户无需在搭载 Android 14 或更高版本的设备上单独下载应用,即可开始使用 Health Connect。
用户可以通过系统设置控制哪些应用可以访问其健康与健身数据。

Health Connect 在 Android 14 中包含多项新功能,例如锻炼路线,可让用户分享可在地图上直观呈现的锻炼路线。路线定义为在一定时间范围内保存的位置列表,您的应用可以将路线插入锻炼时段,将它们关联起来。为确保用户能够完全控制此类敏感数据,用户必须允许与其他应用共享单个路线。

如需了解详情,请参阅 Health Connect 文档以及有关 Android Health 中的新功能的博文。

Actualizaciones de OpenJDK 17

Android 14 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致,包括适合应用和平台开发者的库更新和 Java 17 语言支持。

其中包含以下功能和改进:

  • 将大约 300 个 java.base 类更新为支持 Java 17。
  • 文本块 - 为 Java 编程语言引入了多行字符串字面量。
  • instanceof 模式匹配:可让对象在 instanceof 中被视为具有特定类型,而无需任何额外的变量。
  • 密封类:允许您限制哪些类和接口可以扩展或实现它们。

得益于 Google Play 系统更新 (Project Mainline),6 亿多台设备能够接收包含这些更改的最新 Android 运行时 (ART) 更新。我们致力于为应用提供更加一致、安全的跨设备环境,并为用户提供独立于平台版本的新功能。

Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

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

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

Detecta cuando los usuarios toman capturas de pantalla del dispositivo

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

Experiencia del usuario

Acciones personalizadas y clasificación mejorada de Sharesheet

Android 14 更新了系统 Sharesheet,以便为用户提供自定义应用操作和信息更丰富的预览结果。

添加自定义操作

对于 Android 14,您的应用可以向其调用的系统 Sharesheet 添加自定义操作

分享表格中自定义操作的屏幕截图。

提高直接共享目标的排名

Android 14 根据来自应用的更多信号来确定直接共享目标的排名,以便为用户提供更实用的结果。为了提供最实用的排名信号,请遵循提高直接共享目标排名的准则。通讯应用还可以报告出站和入站消息的快捷方式使用情况

共享表单中的“直接分享”行,如 1
所示

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

视频:预测性返回动画

Android 13 在开发者选项背后引入了预测性“返回主屏幕”动画。在已启用开发者选项的受支持应用中使用时,滑回手势会显示动画,表明返回手势会使应用退回到主屏幕。

Android 14 包含针对“预测性返回”的多项改进和新指南:

在此 Android 14 预览版中,所有预测性返回功能都是位于开发者选项背后。请参阅与将您的应用迁移到预测性返回有关的开发者指南,以及与创建自定义应用内转换有关的开发者指南

Anulaciones por app del fabricante de dispositivos con pantalla grande

Per-app overrides enable device manufacturers to change the behavior of apps on large screen devices. For example, the FORCE_RESIZE_APP override instructs the system to resize the app to fit display dimensions (avoiding size compatibility mode) even if resizeableActivity="false" is set in the app manifest.

Overrides are intended to improve the user experience on large screens.

New manifest properties enable you to disable some device manufacturer overrides for your 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

借助应用界面共享功能,用户可以在录制屏幕内容时共享应用窗口,而不是整个设备屏幕。

在应用屏幕共享模式下,状态栏、导航栏、通知和其他系统界面元素会从共享显示屏中排除。系统只会分享所选应用的内容。

应用屏幕共享功能可让用户运行多个应用,但将内容共享限制为单个应用,从而提高工作效率并保护隐私。

Respuesta inteligente potenciada por LLM en Gboard en el Pixel 8 Pro

在搭载 12 月功能分块的 Pixel 8 Pro 设备上,开发者可以在 Gboard 中试用质量更高的智能回复,这些回复由在 Google Tensor 上运行的设备端大语言模型 (LLM) 提供支持。

此功能目前仅在 WhatsApp、Line 和 KakaoTalk 中以美式英语的形式提供给用户进行小范围测试。此功能需要使用 Pixel 8 Pro 设备,并将 Gboard 用作键盘。

如需试用此功能,请先依次前往设置 > 开发者选项 > AiCore 设置 > 启用 Aicore 持久性,启用该功能。

接下来,在受支持的应用中打开对话,即可在 Gboard 的建议栏中看到依托 LLM 的智能回复,以便回复收到的消息。

Gboard 利用设备端 LLM 提供更高质量的智能回复。

Gráficos

Las rutas de acceso son consultables y se pueden interpolar

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。

Mallas personalizadas con sombreadores de vértices y fragmentos

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

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

Renderizador de búfer de hardware para Canvas

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