Cambios de comportamiento: todas las apps

La plataforma de Android 14 incluye cambios de comportamiento que podrían afectar a tu app. Los siguientes cambios se aplican a todas las apps cuando se ejecutan en Android 14, independientemente de targetSdkVersion. Debes probar tu app y, luego, modificarla según corresponda para admitir estos cambios.

Asegúrate también de consultar la lista de cambios de comportamiento que solo afectan a las apps orientadas a Android 14.

Funcionalidad principal

El permiso para programar alarmas exactas se rechaza de forma predeterminada

Las alarmas exactas están diseñadas para notificaciones destinadas a usuarios o para acciones que deben realizarse en un momento preciso. A partir de Android 14, el permiso SCHEDULE_EXACT_ALARM ya no se otorga, de forma previa, a la mayoría de las apps instaladas más recientemente que se orienten a Android 13 y versiones posteriores; el permiso se rechaza de forma predeterminada.

Obtén más información sobre los cambios en el permiso para programar alarmas exactas.

Las transmisiones registradas en el contexto se ponen en cola mientras las apps se almacenan en caché

在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。

当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例可以合并为一个广播。根据其他因素(例如系统运行状况),系统可能会从缓存状态中移除应用,并且传输之前加入队列的所有广播。

Las apps solo pueden finalizar sus propios procesos en segundo plano

从 Android 14 开始,当您的应用调用 killBackgroundProcesses() 时,该 API 只能终止您自己应用的后台进程。

如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:

Invalid packageName: com.example.anotherapp

您的应用不应使用 killBackgroundProcesses() API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android 旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。如果您的应用会不必要地终止其他应用,则由于之后需要完全重启这些应用,因此可能会降低系统性能并增加耗电量,这比恢复现有缓存应用所消耗的资源要多得多。

La MTU se establece en 517 para el primer cliente de GATT que solicita una MTU.

从 Android 14 开始,Android 蓝牙堆栈会更严格地遵循蓝牙核心规范 5.2 版,当第一个 GATT 客户端使用 BluetoothGatt#requestMtu(int) API 请求 MTU 时,会请求将 BLE ATT MTU 设置为 517 个字节,并忽略针对该 ACL 连接的所有后续 MTU 请求。

如需解决此变更并提高应用的稳健性,请考虑以下选项:

  • 您的外围设备应使用可由外围设备适应的合理值来响应 Android 设备的 MTU 请求。最终商定的值将为 Android 请求的值和远程提供的值(例如 min(517, remoteMtu))中的最小值
    • 实现此修复可能需要更新外围设备的固件
  • 或者,根据外围设备的已知受支持值与接收到的 MTU 变化之间的最小值限制 GATT 特征写入
    • 温馨提示:您应该在支持的标头大小的基础上减少 5 个字节
    • 例如:arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Nuevo motivo por el que una app puede colocarse en el intervalo en espera restringido

Android 14 引入了将应用放入“受限待机”分桶的新原因。由于 onStartJobonStopJobonBind 方法超时,应用的作业会多次触发 ANR 错误。(如需了解对 onStartJobonStopJob 的更改,请参阅 JobScheduler 增强回调和网络行为。)

如需跟踪应用是否已进入“受限待机”分桶,我们建议您在作业执行时使用 API UsageStatsManager.getAppStandbyBucket() 进行日志记录,或者在应用启动时使用 UsageStatsManager.queryEventsForSelf() 进行日志记录。

mlock se limita a 64 KB

En Android 14 (nivel de API 34) y versiones posteriores, la plataforma reduce la memoria máxima que se puede bloquear con mlock() a 64 KB por proceso. En versiones anteriores, el límite era de 64 MB por proceso. Esta restricción promueve una mejor administración de la memoria en las apps y el sistema. Para proporcionar más coherencia en todos los dispositivos, Android 14 agrega una nueva prueba del CTS para el nuevo límite de mlock() en los dispositivos compatibles.

El sistema aplica de manera forzosa el uso de recursos de la app almacenada en caché

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。

Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。

使用框架支持的典型生命周期 API(例如服务JobSchedulerJetpack WorkManager)的应用应该不受这些变化的影响。

Experiencia del usuario

Cambios en la experiencia de los usuarios con notificaciones que no se pueden descartar

Si tu app les muestra a los usuarios notificaciones que no se pueden descartar en primer plano, Android 14 cambió el comportamiento para permitir que los usuarios puedan hacerlo.

Este cambio se aplica a las apps que evitan que los usuarios descarten las notificaciones en primer plano estableciendo Notification.FLAG_ONGOING_EVENT mediante Notification.Builder#setOngoing(true) o NotificationCompat.Builder#setOngoing(true). Se modificó el comportamiento de FLAG_ONGOING_EVENT para que el usuario pueda descartar realmente estas notificaciones.

Estos tipos de notificaciones aún no se pueden descartar en las siguientes situaciones:

  • Si el teléfono está bloqueado.
  • Si el usuario selecciona una acción de notificación Borrar todo (lo que ayuda cuando se descartan por accidente).

Además, este nuevo comportamiento no se aplica a las notificaciones en los siguientes casos de uso:

  • CallStyle notificaciones
  • Controlador de políticas del dispositivo (DPC) y paquetes de asistencia para empresas
  • Notificaciones multimedia
  • El paquete del selector de búsqueda predeterminado

La información de seguridad de los datos es más visible

Para mejorar la privacidad del usuario, Android 14 aumenta la cantidad de lugares en los que el sistema muestra la información que declaraste en el formulario de Play Console. En la actualidad, los usuarios pueden ver esta información en la sección Seguridad de los datos de la ficha de tu app en Google Play.

Te recomendamos que revises las políticas de uso compartido de datos de ubicación de tu app y te tomes un momento para realizar las actualizaciones correspondientes en la sección de Seguridad de los datos de Google Play.

Obtén más información en la guía sobre cómo la información de seguridad de los datos es más visible en Android 14.

Accesibilidad

Escalamiento de fuente no lineal al 200%

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

如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。

Seguridad

Nivel mínimo de API objetivo instalable

从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。

恶意软件通常会以较旧的 API 级别为目标平台,以绕过在较新版本 Android 中引入的安全和隐私保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 14 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示以下消息:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

在升级到 Android 14 的设备上,targetSdkVersion 低于 23 的所有应用都将继续保持安装状态。

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:

adb install --bypass-low-target-sdk-block FILENAME.apk

Los nombres de los paquetes de los propietarios del contenido multimedia podrían estar ocultos

媒体库支持查询 OWNER_PACKAGE_NAME 列,该列表示存储特定媒体文件的应用。从 Android 14 开始,除非满足以下条件之一,否则系统会隐去此值:

  • 存储媒体文件的应用有一个软件包名称始终对其他应用可见。
  • 查询媒体库的应用会请求 QUERY_ALL_PACKAGES 权限。

详细了解 Android 如何出于隐私保护目的而过滤软件包可见性