Cambios de comportamiento: todas las apps

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

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

Funcionalidad principal

Android 15 modifica o expande varias capacidades principales del sistema Android.

Cambios en el estado detenido del paquete

La intención del estado FLAG_STOPPED del paquete (que los usuarios pueden activar en compilaciones de AOSP si mantienen presionado el ícono de una app y seleccionan "Forzar detención") siempre fue mantener las apps en este estado hasta que el usuario las quite de este estado de forma explícita, ya sea iniciándolas directamente o interactuando con ellas de forma indirecta (a través de la hoja compartida o un widget, seleccionando la app como fondo de pantalla en vivo, etcétera). En Android 15, actualizamos el comportamiento del sistema para que se alinee con este comportamiento previsto. Las apps solo deben quitarse del estado detenido a través de una acción directa o indirecta del usuario.

Para admitir el comportamiento deseado, además de las restricciones existentes, el sistema también cancela todos los intents pendientes cuando la app entra en el estado detenido en un dispositivo que ejecuta Android 15. Cuando las acciones del usuario quitan la app del estado detenido, la transmisión ACTION_BOOT_COMPLETED se entrega a la app, lo que brinda la oportunidad de volver a registrar cualquier intent pendiente.

Puedes llamar al nuevo método ApplicationStartInfo.wasForceStopped() para confirmar si la app se puso en el estado de detención.

Compatibilidad con tamaños de página de 16 KB

Históricamente, Android solo admitió tamaños de página de memoria de 4 KB, lo que optimizó el rendimiento de la memoria del sistema para la cantidad promedio de memoria total que suelen tener los dispositivos Android. A partir de Android 15, el AOSP admite dispositivos configurados para usar un tamaño de página de 16 KB (dispositivos de 16 KB). Si tu app usa alguna biblioteca del NDK, ya sea directamente o a través de un SDK, deberás volver a compilarla para que funcione en estos dispositivos de 16 KB.

A medida que los fabricantes de dispositivos sigan creando dispositivos con mayores cantidades de memoria física (RAM), muchos de estos dispositivos adoptarán tamaños de página de 16 KB (y, con el tiempo, incluso mayores) para optimizar el rendimiento del dispositivo. Agregar compatibilidad con dispositivos con tamaño de página de 16 KB permite que tu app se ejecute en estos dispositivos y se beneficie de las mejoras de rendimiento asociadas. Sin recompilación, las apps no funcionarán en dispositivos de 16 KB en futuras versiones de Android.

Para ayudarte a agregar compatibilidad con tu app, te proporcionamos orientación sobre cómo comprobar si tu app se ve afectada, cómo volver a compilar tu app (si corresponde) y cómo probar tu app en un entorno de 16 KB con emuladores (incluidas las imágenes del sistema de Android 15 para Android Emulator).

Beneficios y mejoras de rendimiento

Los dispositivos configurados con tamaños de página de 16 KB usan un poco más de memoria en promedio, pero también obtienen varias mejoras de rendimiento para el sistema y las apps:

  • Tiempos de inicio de la app más bajos mientras el sistema está bajo presión de memoria: un 3.16% más bajo en promedio, con mejoras más significativas (hasta un 30%) para algunas apps que probamos
  • Menor consumo de energía durante el lanzamiento de la app: Reducción promedio del 4.56%
  • Inicio más rápido de la cámara: Inicios en caliente un 4.48% más rápidos en promedio y, en promedio, un 6.60% más rápidos en frío
  • Mejor tiempo de inicio del sistema: se mejoró en un 8% (aproximadamente 950 milisegundos) en promedio.

Estas mejoras se basan en nuestras pruebas iniciales, y es probable que los resultados en los dispositivos reales difieran. Proporcionaremos análisis adicionales de posibles ganancias para las apps a medida que continuemos con las pruebas.

Verifica si tu app se ve afectada

Si tu app usa código nativo, debes recompilarla para que sea compatible con dispositivos de 16 KB. Si no sabes con seguridad si tu app usa código nativo, puedes usar el Analizador de APK para identificar si hay código nativo presente y, luego, verificar la alineación de los segmentos ELF de las bibliotecas compartidas que encuentres. Android Studio también proporciona funciones que te ayudan a detectar automáticamente problemas de alineación.

Si tu app solo usa código escrito en el lenguaje de programación Java o en Kotlin, incluidas todas las bibliotecas o SDKs, ya es compatible con dispositivos de 16 KB. Sin embargo, te recomendamos que pruebes tu app en un entorno de 16 KB para verificar que no haya regresiones inesperadas en el comportamiento de la app.

Cambios obligatorios para que algunas apps admitan el espacio privado

El espacio privado es una nueva función de Android 15 que permite a los usuarios crear un espacio independiente en su dispositivo en el que pueden mantener las apps sensibles lejos de miradas indiscretas, con una capa adicional de autenticación. Debido a que las apps del espacio privado tienen visibilidad restringida, algunos tipos de apps deben seguir pasos adicionales para poder ver e interactuar con las apps del espacio privado de un usuario.

Todas las apps

Debido a que las apps del espacio privado se mantienen en un perfil de usuario independiente, similar a los perfiles de trabajo, las apps no deben suponer que las copias instaladas de su app que no están en el perfil principal están en el perfil de trabajo. Si tu app tiene lógica relacionada con apps de perfil de trabajo que hacen esta suposición, deberás ajustarla.

Apps médicas

Cuando un usuario bloquea el espacio privado, se detienen todas las apps que se encuentran en él, y estas no pueden realizar actividades en primer o segundo plano, incluida la visualización de notificaciones. Este comportamiento podría afectar de manera significativa el uso y la función de las apps médicas instaladas en el espacio privado.

La experiencia de configuración del espacio privado advierte a los usuarios que el espacio privado no es adecuado para apps que necesitan realizar actividades críticas en primer o segundo plano, como mostrar notificaciones de apps médicas. Sin embargo, las apps no pueden determinar si se están usando o no en el espacio privado, por lo que no pueden mostrar una advertencia al usuario en este caso.

Por estos motivos, si desarrollas una app médica, revisa cómo esta función podría afectarla y toma las medidas adecuadas, como informar a los usuarios que no la instalen en el espacio privado, para evitar interrumpir sus funciones fundamentales.

Apps de lanzamiento

Si desarrollas una app de selector, debes hacer lo siguiente para que las apps del espacio privado sean visibles:

  1. Tu app debe asignarse como la app de selector predeterminado del dispositivo, es decir, debe tener el rol ROLE_HOME.
  2. Tu app debe declarar el permiso normal ACCESS_HIDDEN_PROFILES en el archivo de manifiesto de la app.

Las apps de selector que declaran el permiso ACCESS_HIDDEN_PROFILES deben controlar los siguientes casos de uso de espacio privado:

  1. Tu app debe tener un contenedor de selector independiente para las apps instaladas en el espacio privado. Usa el método getLauncherUserInfo() para determinar qué tipo de perfil de usuario se está controlando.
  2. El usuario debe poder ocultar y mostrar el contenedor de espacio privado.
  3. El usuario debe poder bloquear y desbloquear el contenedor de espacio privado. Usa el método requestQuietModeEnabled() para bloquear (pasando true) o desbloquear (pasando false) el espacio privado.
  4. Cuando está bloqueado, ninguna app del contenedor de espacio privado debe ser visible ni detectable a través de mecanismos como la búsqueda. Tu app debe registrar un receptor para las transmisiones de ACTION_PROFILE_AVAILABLE y ACTION_PROFILE_UNAVAILABLE, y actualizar la IU en tu app cuando cambie el estado de bloqueo o desbloqueo del contenedor de espacio privado. Ambas transmisiones incluyen EXTRA_USER, que tu app puede usar para hacer referencia al usuario del perfil privado.

    También puedes usar el método isQuietModeEnabled() para verificar si el perfil de espacio privado está bloqueado o no.

Apps de tiendas de aplicaciones

El espacio privado incluye un botón "Instalar apps" que inicia un intent implícito para instalar apps en el espacio privado del usuario. Para que tu app reciba este intent implícito, declara un <intent-filter> en el archivo de manifiesto de tu app con un <category> de CATEGORY_APP_MARKET.

Se quitó la fuente de emojis basada en PNG

我们移除了基于 PNG 的旧版表情符号字体文件 (NotoColorEmojiLegacy.ttf),只保留了基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染程序使用的表情符号字体文件已从基于 PNG 的文件更改为基于矢量的文件。出于兼容性原因,系统在 Android 13 和 14 中保留了旧版字体文件,以便具有自己的字体渲染程序的应用在能够升级之前继续使用旧版字体文件。

如需检查您的应用是否受到影响,请在应用的代码中搜索对 NotoColorEmojiLegacy.ttf 文件的引用。

您可以通过多种方式自适应应用:

  • 使用平台 API 进行文本渲染。您可以将文本渲染到基于位图的 Canvas,并在必要时使用该 Canvas 获取原始图片。
  • 为您的应用添加 COLRv1 字体支持。FreeType 开源库在 2.13.0 版及更高版本中支持 COLRv1。
  • 作为最后的手段,您可以将旧版表情符号字体文件 (NotoColorEmoji.ttf) 捆绑到 APK 中,但在这种情况下,您的应用将缺少最新的表情符号更新。如需了解详情,请参阅 Noto Emoji GitHub 项目页面

Se aumentó la versión mínima del SDK objetivo de 23 a 24

Android 15 基于 在 Android 14 中进行的更改,并扩展了 安全性。在 Android 15 中, 无法安装低于 24 的 targetSdkVersion。 要求应用符合现代 API 级别有助于确保更好的安全性和 保护隐私。

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

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

在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用 安装在 Google Play 上

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

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

Seguridad y privacidad

Android 15 引入了强大的措施来防范动态密码 (OTP) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 Android 自动识别敏感字段之外,开发者还可以使用 setContentSensitivity 手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。
  • 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。

Cámara y contenido multimedia

Android 15 realiza los siguientes cambios en el comportamiento de la cámara y el contenido multimedia para todas las apps.

La reproducción de audio directa y descargada invalida las pistas de audio directas o descargadas abiertas anteriormente cuando se alcanzan los límites de recursos

Antes de Android 15, si una app solicitaba la reproducción de audio directa o descargada mientras otra app estaba reproduciendo audio y se alcanzaban los límites de recursos, la app no podía abrir un nuevo AudioTrack.

A partir de Android 15, cuando una app solicita la reproducción directa o de descarga y se alcanzan los límites de recursos, el sistema invalida los objetos AudioTrack abiertos que impiden entregar la solicitud de pista nueva.

(Por lo general, se abren pistas de audio directas y de descarga para la reproducción de formatos de audio comprimidos. Entre los casos de uso comunes para reproducir audio directo, se incluye la transmisión de audio codificado a través de HDMI a una TV. Por lo general, se usan para reproducir audio comprimido en un dispositivo móvil con aceleración de DSP de hardware.

Experiencia del usuario y IU del sistema

Android 15 incluye algunos cambios destinados a crear una experiencia del usuario más coherente e intuitiva.

Animaciones del gesto atrás predictivo habilitadas para las apps que aceptaron participar

从 Android 15 开始,预测性返回动画的开发者选项已被移除。现在,如果应用已完全或在 activity 级别选择启用预测性返回手势,则系统会为其显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。如果您的应用受到了影响,请执行以下操作:

  • 确保您的应用已正确迁移,以使用预测性返回手势。
  • 确保 fragment 转场效果可与预测性返回导航搭配使用。
  • 请弃用动画和框架过渡,改用动画和 androidx 过渡。
  • FragmentManager 不认识的返回堆栈迁移。请改用由 FragmentManager 或 Navigation 组件管理的返回堆栈。

Widgets inhabilitados cuando el usuario detiene una app de forma forzada

Si un usuario detiene de forma forzosa una app en un dispositivo que ejecuta Android 15, el sistema inhabilita temporalmente todos los widgets de la app. Los widgets están inhabilitados, y el usuario no puede interactuar con ellos. Esto se debe a que, a partir de Android 15, el sistema cancela todos los intents pendientes de una app cuando se detiene de forma forzosa.

El sistema vuelve a habilitar esos widgets la próxima vez que el usuario inicia la app.

Para obtener más información, consulta Cambios en el estado de detención del paquete.

El chip de la barra de estado de la proyección de contenido multimedia alerta a los usuarios sobre el uso compartido, la transmisión y la grabación de la pantalla

Los exploits de proyección de pantalla exponen datos privados del usuario, como información financiera, porque los usuarios no se dan cuenta de que se está compartiendo la pantalla de su dispositivo.

En el caso de las apps que se ejecutan en dispositivos con Android 15 QPR1 o versiones posteriores, un chip de la barra de estado grande y destacado alerta a los usuarios sobre cualquier proyección de pantalla en curso. Los usuarios pueden presionar el chip para evitar que se comparta, transmita o grabe su pantalla. Además, la proyección de pantalla se detiene automáticamente cuando se bloquea la pantalla del dispositivo.

Chip de la barra de estado para compartir pantalla, transmitir y grabar.

检查您的应用是否受到影响

默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。

如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止

Restricciones de acceso a la red en segundo plano

在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。

为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。

Bajas

Con cada actualización, es posible que las APIs específicas de Android queden obsoletas o deban refactorizarse para ofrecerles una mejor experiencia a los desarrolladores o admitir nuevas funciones de la plataforma. En estos casos, damos de baja oficialmente las APIs obsoletas y les indicamos a los desarrolladores las APIs alternativas que pueden usar en su lugar.

Baja significa que finalizamos la asistencia oficial para las APIs, pero estas seguirán disponibles para los desarrolladores. Para obtener más información sobre las bajas notables de esta versión de Android, consulta la página de bajas.