Cambios de comportamiento: todas las apps

La plataforma de Android 15 incluye cambios de comportamiento que podrían afectar a tu app. Los siguientes cambios de comportamiento se aplican a todas las apps cuando se ejecutan en Android 15: independientemente de targetSdkVersion. Deberías probar tu app y, luego, modificarla según sea necesario para admitirlos de forma adecuada, cuando corresponda.

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 de detención del paquete

La intención del estado FLAG_STOPPED del paquete (que los usuarios pueden interactuar en las compilaciones del AOSP manteniendo presionado el ícono de la app y seleccionando "Forzar detención") siempre ha sido mantener las apps en este estado hasta que el usuario las quite de forma explícita desde el inicio directo o la interacción indirecta con la app (a través de la hoja compartida o un widget, seleccionando la app como fondo animado, etcétera). En Android 15, actualizamos el comportamiento del sistema para que se alinee con el comportamiento deseado. Solo se deben quitar las apps del estado de detención a través de la 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 de detención en un dispositivo que ejecuta Android 15. Cuando las acciones del usuario quitan la app del estado de detención, la transmisión de 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 estado detenida.

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

Históricamente, Android solo admitía 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 los dispositivos Android solían tener. A partir de Android 15, Android admite dispositivos configurados para usar un tamaño de página de 16 KB (dispositivos de 16 KB).

A medida que los fabricantes de dispositivos continúan creando dispositivos con mayores cantidades de memoria física (RAM), es probable que muchos de estos dispositivos estén configurados con tamaños de página de 16 KB (y, eventualmente, más grandes) para optimizar el rendimiento del dispositivo. Agregar compatibilidad con dispositivos de 16 KB permite que tu app se ejecute en esos dispositivos y ayuda a que se beneficie de las mejoras de rendimiento asociadas. Para ayudarte con esto, proporcionamos orientación sobre cómo verificar si tu app se ve afectada, cómo volver a compilarla (si corresponde) y probarla en un entorno de 16 KB con emuladores y dispositivos físicos.

Aumento de los beneficios y del 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 tanto para el sistema como para las apps:

  • Menores tiempos de inicio de la app 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
  • Consumo de energía reducido durante el lanzamiento de la app: reducción promedio del 4.56%
  • Lanzamiento más rápido de la cámara: inicios en caliente un 4.48% más rápidos en promedio y inicios en frío un 6.60% más rápidos en promedio
  • Tiempo de inicio del sistema mejorado: Mejora en un 1.5% (aproximadamente 0.8 segundos) en promedio.

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

Verifica si el cambio afecta a tu app

Si tu app usa cualquier código nativo, debes volver a compilarla y admitir 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.

Si tu app solo usa código escrito en el lenguaje de programación Java o en Kotlin, incluidas todas las bibliotecas o SDKs, entonces 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 su comportamiento.

Cambios obligatorios para que algunas apps admitan el espacio privado

私密空间是 Android 15 中的一项新功能,可让用户在设备上创建一个单独的空间,使敏感应用免遭窥探,并额外增加一层身份验证。由于私密空间中的应用的可见性受到限制,因此某些类型的应用需要执行额外的步骤才能查看用户的私密空间中的应用并与之互动。

所有应用

由于私密空间中的应用保存在单独的用户个人资料中(类似于工作资料),因此应用不应假定主资料中已安装的任何应用副本都位于工作资料中。如果您的应用与工作资料应用相关的逻辑做出此假设,那么您需要调整此逻辑。

启动器应用

如果您要开发启动器应用,必须执行以下操作,私密空间中的应用才会显示出来:

  1. 您必须将应用指定为设备的默认启动器应用,即具有 ROLE_HOME 角色。
  2. 应用必须在应用的清单文件中声明 ACCESS_HIDDEN_PROFILES 一般权限。

声明 ACCESS_HIDDEN_PROFILES 权限的启动器应用必须处理以下私密空间用例:

  1. 您的应用必须为安装在私密空间中的应用提供单独的启动器容器。使用 getLauncherUserInfo() 方法确定正在处理的用户个人资料类型。
  2. 用户必须能够隐藏和显示私密空间容器。
  3. 用户必须能够锁定和解锁私密空间容器。使用 requestQuietModeEnabled() 方法可锁定(通过传递 true)或解锁(通过传递 false)私密空间。
  4. 处于锁定状态时,私密空间容器中的任何应用都不应通过搜索等机制可见或发现。您的应用应为 ACTION_PROFILE_AVAILABLEACTION_PROFILE_UNAVAILABLE 广播注册接收器,并在私密空间容器的锁定或解锁状态发生变化时更新应用中的界面。这两个广播都包含 EXTRA_USER,您的应用可以使用它来引用私密个人资料用户。

    您还可以使用 isQuietModeEnabled() 方法检查私密空间配置文件是否已锁定。

应用商店应用

私密空间包含一个“安装应用”按钮,该按钮可启动隐式 intent,以将应用安装到用户的私密空间中。为了让您的应用接收此隐式 intent,请在应用的清单文件中声明 <intent-filter>,并将 <category> 设为 CATEGORY_APP_MARKET

Se quitó la fuente de emojis basada en PNG

El archivo de fuente de emojis heredado basado en PNG (NotoColorEmojiLegacy.ttf) se y deja solo el archivo basado en vectores. A partir de Android 13 (API nivel 33), el archivo de fuente de emoji utilizado por el procesador de emojis del sistema cambió de un archivo basado en PNG a un archivo basado en vectores. El sistema retuvo el archivo de fuentes heredado en Android 13 y 14 por motivos de compatibilidad, de modo que las apps con sus propios procesadores de fuentes podrían seguir usando el archivo de fuentes heredado hasta que pudieron actualizarlas.

Puedes elegir adaptar tu app de varias maneras:

  • Usa las APIs de la plataforma para la renderización de texto. Cómo renderizar texto en un mapa de bits respaldado Canvas y úsalo para obtener una imagen sin procesar si es necesario.
  • Agrega compatibilidad con fuentes COLRv1 a tu app. La biblioteca de código abierto FreeType admite COLRv1 en la versión 2.13.0 y mayores.
  • Como último recurso, puedes empaquetar el archivo de fuentes de emojis heredados (NotoColorEmoji.ttf) en tu APK aunque, en ese caso, tu app no contará con las actualizaciones de emojis más recientes. Para para obtener más información, consulta el proyecto Noto de emojis en GitHub .

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

Android 15 se basa en los cambios que se realizaron en Android 14 y amplía aún más esta seguridad. En Android 15, no se pueden instalar apps con un targetSdkVersion inferior a 24. Exigir que las apps cumplan con niveles de API modernos ayuda a garantizar una mejor seguridad y privacidad.

A menudo, el software malicioso se orienta a niveles de API inferiores para evitar las protecciones de seguridad y privacidad que se introdujeron en versiones posteriores de Android. Por ejemplo, algunas apps de software malicioso usan targetSdkVersion de 22 para evitar que estén sujetas al modelo de permisos de tiempo de ejecución que, en 2015, introdujo Android 6.0 Marshmallow (nivel de API 23). Este cambio en Android 15 dificulta que el software malicioso evite las mejoras de seguridad y privacidad. Si intentas instalar una app que se oriente a un nivel de API inferior, se producirá un error de instalación y aparecerá un mensaje como el siguiente en Logcat:

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

En los dispositivos que se actualizan a Android 15, las apps que tengan un targetSdkVersion inferior a 24 permanecerán instaladas.

Si necesitas probar una app que se oriente a un nivel de API anterior, usa el siguiente comando de adb:

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

Cámara y contenido multimedia

Android 15 realiza los siguientes cambios en el comportamiento de la cámara y el contenido multimedia para todos de Google Chat.

La reproducción de audio directa y de descarga ahora invalida las pistas de audio directas o de descarga que estaban abiertas cuando se alcanza el límite de recursos.

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

A partir de Android 15, cuando una app solicita una reproducción directa o de descarga y se alcanzan los límites de recursos, el sistema invalida cualquier objeto AudioTrack abierto actualmente, lo que impide completar la nueva solicitud de segmento.

(Las pistas de audio directas y de descarga generalmente se abren para la reproducción de formatos de audio comprimidos. Los casos de uso comunes para reproducir audio directo incluyen la transmisión de audio codificado por HDMI a una TV. Por lo general, las pistas de descarga se usan para reproducir audio comprimido en un dispositivo móvil con aceleración de DSP de hardware).

IU del sistema y experiencia del usuario

Android 15 incluye algunos cambios destinados a crear un entorno una experiencia del usuario intuitiva.

Animaciones de atrás predictivo habilitadas para apps habilitadas

A partir de Android 15, se quitó la opción para desarrolladores para las animaciones de atrás predictivo. Las animaciones del sistema, como volver a la página principal, cambiar de tarea y cambiar de actividad, ahora aparecen para las apps que habilitaron el gesto atrás predictivo, ya sea por completo o a nivel de actividad. Si tu app se ve afectada, toma las siguientes medidas:

  • Asegúrate de que la app se haya migrado de forma correcta para usar el gesto atrás predictivo.
  • Asegúrate de que las transiciones de fragmentos funcionen con la navegación hacia atrás predictivo.
  • Migra desde las transiciones de animación y framework y usa transiciones de animador y androidx en su lugar.
  • Migra desde las pilas de actividades que FragmentManager no conoce. Usa pilas de actividades administradas por FragmentManager o por el componente Navigation en su lugar.

Widgets que se inhabilitan cuando el usuario fuerza la detención de una app

Si un usuario fuerza la detención de 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 esta se detiene de manera forzosa.

El sistema volverá a habilitar esos widgets la próxima vez que el usuario inicie la app.

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

Bajas

Con cada versión, es posible que las APIs de Android específicas queden obsoletas o deban refactorizar para brindar una mejor experiencia al desarrollador o admitir una nueva plataforma capacidades de integración. En estos casos, las APIs y las APIs obsoletas dejarán de estar disponibles oficialmente y pedirles a los desarrolladores que usen APIs alternativas.

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