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 扩展了 Android 13(API 级别 33)中引入的按应用设定语言功能,并包含以下额外功能:
自动生成应用的
localeConfig
:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以将应用配置为自动支持各应用语言偏好设定。Android Gradle 插件会根据您的项目资源生成LocaleConfig
文件,并在最终清单文件中添加对该文件的引用,这样您就不再需要手动创建或更新该文件。AGP 使用应用模块的res
文件夹中的资源以及任何库模块依赖项来确定要在LocaleConfig
文件中添加的语言区域。动态更新应用的
localeConfig
:使用LocaleManager
方法中的setOverrideLocaleConfig()
和getOverrideLocaleConfig()
可以在设备的系统设置中动态更新应用的受支持语言列表。有了这种灵活性,您可以按区域自定义支持的语言列表、运行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。输入法 (IME) 的应用语言可见性:IME 可以利用
getApplicationLocales()
方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。
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.
Para ayudarte a compilar una IU centrada en el usuario para idiomas con inflexión de género, Android 14 introduce la API de Grammatical Inflection, que te permite agregar compatibilidad con el género gramatical sin refactorizar la app.
Preferencias regionales
用户可通过地区偏好设置对温度单位、一周的第一天和编号系统进行个性化设置。居住在美国的欧洲用户可能更希望使用摄氏度,而不是华氏度,并且希望应用将星期一视为一周的开始,而不是像美国那样默认从星期日开始。
新 Android 设置菜单包含这些偏好设置,使用户能够在一个位置集中发现这些应用更改偏好设置。这些偏好设置在备份和恢复设备后也会保持不变。多个 API 和 intent(例如 getTemperatureUnit
和 getFirstDayOfWeek
)会为您的应用授予读取权限来访问用户偏好设置,因此您的应用可以调整其显示信息的方式。您还可以在 ACTION_LOCALE_CHANGED
上注册 BroadcastReceiver
,以便在地区偏好设置发生更改时处理语言区域配置更改。
如需找到这些设置,请打开“设置”应用,然后依次前往系统 > 语言和输入法 > 地区偏好设置。
Accesibilidad
Escalamiento de fuente no lineal al 200%
从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍选项。
为防止屏幕上的大文本元素放大过大,系统会采用非线性放大曲线。这种放大策略意味着大号文本的放大比例不会与较小的文本相同。非线性字体缩放有助于保持不同大小元素之间的比例层次结构,同时缓解高级别线性文本缩放的问题(例如文本被截断或文本因超大显示大小而难以阅读)。
使用非线性字体放大测试应用
如果您已经使用放大像素 (sp) 单位来定义文本大小,那么这些额外的选项和缩放改进会自动应用于应用中的文本。但是,您仍然应该在启用最大字体大小 (200%) 的情况下执行界面测试,以确保应用正确应用字体大小,并且可以适应更大的字体大小,而不影响易用性。
要启用 200% 字号,请按以下步骤操作:
- 打开“设置”应用,然后依次前往无障碍 > 显示大小和文字。
- 在字号选项中,点按加号 (+) 图标,直到启用最大字号设置,如本部分随附的图片所示。
针对文本大小使用放大像素 (sp) 单位
请务必始终以 sp 为单位指定文本大小。当应用使用 sp 单位时,Android 可以应用用户的首选文本大小并相应地缩放。
不要为内边距使用 sp 单位,也不假设隐式内边距定义视图高度:使用非线性字体缩放 sp 尺寸可能不成比例,因此 4sp + 20sp 可能不等于 24sp。
转换放大像素 (sp) 单位
使用 TypedValue.applyDimension()
从 sp 单位转换为像素,并使用 TypedValue.deriveDimension()
将像素转换为 sp。这些方法会自动应用适当的非线性缩放曲线。
避免使用 Configuration.fontScale
或 DisplayMetrics.scaledDensity
对方程进行硬编码。由于字体缩放是非线性的,因此 scaledDensity
字段不再准确。fontScale
字段应仅用于提供信息,因为字体不再使用单个标量值进行缩放。
对 lineHeight 使用 sp 单位
始终使用 sp 单位(而非 dp)定义 android:lineHeight
,以便行高随文本一起缩放。否则,如果您的文本为 sp,而 lineHeight
以 dp 或 px 为单位,则文本无法缩放且看起来狭窄。TextView 会自动更正 lineHeight
以保留您预期的比例,但前提是以 sp 为单位同时定义 textSize
和 lineHeight
。
Cámara y contenido multimedia
Ultra HDR para imágenes
Android 14 增加了对高动态范围 (HDR) 图片的支持,此类图片可在拍照时保留来自传感器的更多信息,从而实现鲜艳的色彩和更高的对比度。Android 采用 Ultra HDR 格式,这种格式可完全向后兼容 JPEG 图片,允许应用与 HDR 图片无缝互操作,从而根据需要以标准动态范围 (SDR) 显示图片。
当您的应用为其 Activity 窗口选择使用 HDR 界面(通过清单条目或在运行时通过调用 Window.setColorMode()
)时,框架会自动在 HDR 界面中呈现这些图片。您还可以在支持的设备上拍摄压缩的 Ultra HDR 静态图片。从传感器中恢复的颜色越多,博文中的编辑效果就越灵活。与 Ultra HDR 图片关联的 Gainmap
可用于使用 OpenGL 或 Vulkan 渲染这些图片。
Zoom, enfoque, vista posterior y mucho más en las extensiones de cámara
Android 14 se actualiza y mejora las extensiones de cámara, lo que permite que las apps controlen tiempos de procesamiento más largos, lo que habilita imágenes mejoradas con algoritmos de procesamiento intensivo, como fotografías con poca luz en dispositivos compatibles. Estas funciones les brindan a los usuarios una experiencia aún más sólida cuando usan las capacidades de extensión de la cámara. Estos son algunos ejemplos de estas mejoras:
- La estimación dinámica de la latencia de procesamiento de capturas estáticas proporciona estimaciones de latencia de capturas igualmente precisas basadas en la escena y las condiciones del entorno actuales. Llama a
CameraExtensionSession.getRealtimeStillCaptureLatency()
para obtener un objetoStillCaptureLatency
que tenga dos métodos de estimación de latencia. El métodogetCaptureLatency()
muestra la latencia estimada entreonCaptureStarted
yonCaptureProcessStarted()
, y el métodogetProcessingLatency()
muestra la latencia estimada entreonCaptureProcessStarted()
y el fotograma procesado final que está disponible. - Compatibilidad con devoluciones de llamada de progreso de captura para que las apps puedan mostrar el progreso actual de operaciones de procesamiento de captura y de larga duración. Puedes verificar si esta función está disponible con
CameraExtensionCharacteristics.isCaptureProcessProgressAvailable
y, si lo está, implementa la devolución de llamadaonCaptureProcessProgressed()
, que tiene el progreso (de 0 a 100) pasado como parámetro. Metadatos específicos de extensiones, como
CaptureRequest.EXTENSION_STRENGTH
, para marcar la cantidad de un efecto de extensión (por ejemplo, el desenfoque del fondo conEXTENSION_BOKEH
)Función de posvista para la captura estática en las extensiones de la cámara, que proporciona una imagen menos procesada más rápido que la imagen final. Si una extensión aumentó la latencia de procesamiento, se podría proporcionar una imagen posterior a la vista como marcador de posición para mejorar la UX y cambiarla más tarde por la imagen final. Puedes verificar si esta función está disponible con
CameraExtensionCharacteristics.isPostviewAvailable
. Luego, puedes pasar unOutputConfiguration
aExtensionSessionConfiguration.setPostviewOutputConfiguration
.La compatibilidad con
SurfaceView
, lo que permite obtener una ruta de renderización de vista previa más optimizada y con mayor eficiencia energéticaCompatibilidad con la función de presionar para enfocar y hacer zoom durante el uso de la extensión.
Zoom en el sensor
Cuando REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE
en CameraCharacteristics
contiene SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
, tu app puede usar capacidades avanzadas de sensores para otorgar los mismos píxeles a una transmisión RAW recortada los mismos píxeles que el campo visual completo mediante CaptureRequest
con un objetivo RAW que tenga el caso de uso de transmisión establecido en CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
.
Cuando se implementan los controles de anulación de solicitudes, la cámara actualizada les brinda a los usuarios control de zoom incluso antes de que estén listos otros controles de la cámara.
Audio USB sin pérdida
Android 14 admite formatos de audio sin pérdida para experiencias de nivel de audiófilo a través de auriculares con cable USB. Puedes consultar un dispositivo USB para obtener sus atributos del mezclador preferidos, registrar un objeto de escucha para los cambios en los atributos preferidos del mezclador y configurar los atributos del mezclador con la clase AudioMixerAttributes
. Esta clase representa el formato, como la máscara de canal, la tasa de muestreo y el comportamiento del mezclador de audio. La clase permite enviar el audio directamente, sin mezclar, ajustar el volumen ni procesar efectos.
Productividad y herramientas para desarrolladores
Credential Manager
Android 14 添加了 Credential Manager 作为平台 API,并通过使用 Google Play 服务的 Jetpack 库为 Android 4.4(API 级别 19)设备提供了额外的支持。凭据管理器旨在使用 API 通过用户配置的凭据提供程序检索和存储凭据,让用户更轻松地登录。凭据管理器在一个 API 中支持多种登录方法,包括用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 账号登录”)。
通行密钥具有许多优势。例如,通行密钥基于业界标准构建,可在不同的操作系统和浏览器生态系统中使用,还可用于网站和应用。
如需了解详情,请参阅凭据管理器和通行密钥文档以及关于 Credential Manager 和通行密钥的博文。
Health Connect
Health Connect 是设备端用户健康与健身数据的存储区。它 让用户可以在喜爱的应用之间共享数据 控制他们要与这些应用分享哪些数据
在搭载 Android 14 之前版本的 Android 设备上,Health Connect 会 可在 Google Play 商店中以应用的形式下载。从 Android 14 开始,Health Connect 将成为 Android 平台的一部分,并通过 Google Play 系统更新接收更新,而无需单独下载。这样,健康 Connect 可能会经常更新,并且您的应用可以依赖于 Health Connect 在搭载 Android 14 或更高版本的设备上可用。用户可以访问“健康”应用 通过设备中的“设置”连接,以及集成到 与系统设置有关
Health Connect 包含 Android 14 中的多项新功能,例如锻炼 路线,让用户能够分享锻炼路线,并且路线直观 。路线定义为在一定时间范围内保存的位置列表,您的应用可以将路线插入锻炼时段,将它们关联起来。为确保用户可以完全控制这些敏感数据, 用户必须允许与其他应用分享具体路线。
有关详情,请参阅 Health Connection 文档以及关于 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 introduces several PackageInstaller
APIs that
allow app stores to improve their user experience.
Request install approval before downloading
Installing or updating an app might require user approval.
For example, when an installer making use of the
REQUEST_INSTALL_PACKAGES
permission attempts to install a
new app. In prior Android versions, app stores can only request user approval
after APKs are written to the install session and the
session is committed.
Starting with Android 14, the requestUserPreapproval()
method lets installers request user approval before committing the install
session. This improvement lets an app store defer downloading any APKs until
after the installation has been approved by the user. Furthermore, once a user
has approved installation, the app store can download and install the app in the
background without interrupting the user.
Claim responsibility for future updates
The setRequestUpdateOwnership()
method allows an installer
to indicate to the system that it intends to be responsible for future updates
to an app it is installing. This capability enables update ownership
enforcement, meaning that only the update owner is permitted
to install automatic updates to the app. Update ownership enforcement helps to
ensure that users receive updates only from the expected app store.
Any other installer, including those making use of the
INSTALL_PACKAGES
permission, must receive explicit user
approval in order to install an update. If a user decides to proceed with an
update from another source, update ownership is lost.
Update apps at less-disruptive times
App stores typically want to avoid updating an app that is actively in use because this leads to the app's running processes being killed, which potentially interrupts what the user was doing.
Starting with Android 14, the InstallConstraints
API
gives installers a way to ensure that their app updates happen at an opportune
moment. For example, an app store can call the
commitSessionAfterInstallConstraintsAreMet()
method to
make sure that an update is only committed when the user is no longer
interacting with the app in question.
Seamlessly install optional splits
With split APKs, features of an app can be delivered in separate APK files,
rather than as a monolithic APK. Split APKs allow app stores to optimize the
delivery of different app components. For example, app stores might optimize
based on the properties of the target device. The
PackageInstaller
API has supported splits since its
introduction in API level 22.
In Android 14, the setDontKillApp()
method allows an
installer to indicate that the app's running processes shouldn't be killed when
new splits are installed. App stores can use this feature to seamlessly install
new features of an app while the user is using the app.
Paquetes de metadatos de la app
A partir de Android 14, el instalador del paquete de Android te permite especificar metadatos de la app, como las prácticas de seguridad de los datos, para incluir en las páginas de la tienda de aplicaciones, como 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 根据来自应用的更多信号来确定直接 分享目标,以便为用户提供更实用的结果。 若要提供最有用的排名信号,请遵循 提高直接共享目标的排名。 通信应用还可以报告以下内容的快捷方式使用情况: 外发和传入的邮件
Compatibilidad con animaciones integradas y personalizadas para el gesto atrás predictivo
En Android 13, se introdujo la animación de atrás predictivo a la página principal detrás de una opción para desarrolladores. Cuando se usa en una app compatible que tiene habilitada la opción para desarrolladores, al deslizar hacia atrás, se muestra una animación que indica que el gesto de retroceso permite cerrar la app y regresar a la pantalla principal.
Android 14 incluye varias mejoras y orientación nueva para el gesto atrás predictivo:
- Puedes configurar
android:enableOnBackInvokedCallback=true
para habilitar las animaciones del sistema de atrás predictivo por actividad en lugar de para toda la app. - Agregamos nuevas animaciones del sistema para acompañar la animación de regreso a la pantalla principal de Android 13. Las nuevas animaciones del sistema son las de cambio de actividad y cambio de tarea, que obtienes automáticamente después de la migración al gesto atrás predictivo.
- Agregamos nuevas animaciones de componentes de material para las hojas inferiores, las hojas laterales y la búsqueda.
- Creamos una guía de diseño para crear transiciones y animaciones personalizadas en la app.
- Agregamos nuevas APIs para admitir animaciones de transición en la app:
handleOnBackStarted
,handleOnBackProgressed
yhandleOnBackCancelled
in
OnBackPressedCallback
onBackStarted
,onBackProgressed
yonBackCancelled
in
OnBackAnimationCallback
- Usa
overrideActivityTransition
en lugar deoverridePendingTransition
para las transiciones que responden cuando el usuario desliza el dedo hacia atrás
Con esta versión preliminar de Android 14, todas las funciones de atrás predictivo permanecen detrás de una opción para desarrolladores. Consulta la guía para desarrolladores para migrar tu app al gesto atrás predictivo, así como la guía para desarrolladores para crear transiciones personalizadas en la app.
Anulaciones por app del fabricante de dispositivos con pantalla grande
借助按应用替换项,设备制造商可以更改应用在大屏设备上的行为。例如,FORCE_RESIZE_APP
替换项会指示系统调整应用大小以适应显示屏尺寸(避免进入尺寸兼容模式),即使在应用清单中设置了 resizeableActivity="false"
也是如此。
替换项旨在改善大屏设备上的用户体验。
借助新的清单属性,您可以为应用停用某些设备制造商替换项。
Anulaciones por app para usuarios de pantallas grandes
Las anulaciones por app cambian el comportamiento de las apps en dispositivos con pantallas grandes. Por ejemplo, la anulación del fabricante del dispositivo OVERRIDE_MIN_ASPECT_RATIO_LARGE
establece la relación de aspecto de la app en 16:9, independientemente de su configuración.
QPR1 para Android 14 permite a los usuarios aplicar anulaciones por app mediante un nuevo menú de configuración en dispositivos con pantalla grande.
Compartir pantalla de una app
La función para compartir pantalla de la app permite que los usuarios compartan una ventana de la app en lugar de toda la pantalla del dispositivo durante la grabación del contenido de la pantalla.
Cuando se comparte la pantalla de la app, la barra de estado, la barra de navegación, las notificaciones y otros elementos de la IU del sistema se excluyen de la pantalla compartida. Solo se comparte el contenido de la app seleccionada.
La función para compartir pantalla en las apps mejora la productividad y la privacidad, ya que permite que los usuarios ejecuten varias apps, pero limita el uso compartido de contenido a una sola app.
Respuesta inteligente potenciada por LLM en Gboard en el Pixel 8 Pro
在附带 12 月功能更新版的 Pixel 8 Pro 设备上,开发者可以在 Gboard 中体验更优质的智能回复,该功能由在 Google Tensor 上运行的设备端大型语言模型 (LLM) 提供支持。
此功能目前仅在 WhatsApp、Line 和 KakaoTalk 中推出美式英语的有限预览版。该功能需要使用一部支持 Gboard 的 Pixel 8 Pro 设备作为键盘。
如需试用,请先依次选择设置 > 开发者选项 > AiCore 设置 > 启用 Aicore Persistent 以启用该功能。
接下来,在受支持的应用中打开对话,以在 Gboard 的建议栏中看到由 LLM 提供支持的智能回复,以便响应收到的消息。
Gráficos
Las rutas de acceso son interpolables y consultables
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
。以下示例返回了一个形状介于 path
和 otherPath
之间的一半(线性插值为 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 编写的顶点和片段着色器指定。
顶点着色器定义变化,例如位置和颜色,而 fragment 着色器可以选择定义像素的颜色,通常通过使用顶点着色器创建的变化。如果 fragment 着色器提供了颜色,则它会使用绘制网格时选择的混合模式与当前的 Paint
颜色混合。您可以将 uniform 传递到 fragment 和顶点着色器中,以提高灵活性。
Renderizador de búfer de hardware para Canvas
Para ayudar a usar la API de Canvas
de Android y dibujar con aceleración de hardware en un HardwareBuffer
, Android 14 presenta HardwareBufferRenderer
. Esta API es
particularmente útil cuando tu caso de uso involucra la comunicación con el sistema
a través de SurfaceControl
para una latencia baja
dibujo.