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

Private space is a new feature in Android 15 that lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. Because apps in the private space have restricted visibility, some types of apps need to take additional steps to be able to see and interact with apps in a user's private space.

All apps

Because apps in the private space are kept in a separate user profile, similar to work profiles, apps shouldn't assume that any installed copies of their app that aren't in the main profile are in the work profile. If your app has logic related to work profile apps that make this assumption, you'll need to adjust this logic.

Launcher apps

If you develop a launcher app, you must do the following before apps in the private space will be visible:

  1. Your app must be assigned as the default launcher app for the device—that is, possessing the ROLE_HOME role.
  2. Your app must declare the ACCESS_HIDDEN_PROFILES normal permission in your app's manifest file.

Launcher apps that declare the ACCESS_HIDDEN_PROFILES permission must handle the following private space use cases:

  1. Your app must have a separate launcher container for apps installed in the private space. Use the getLauncherUserInfo() method to determine which type of user profile is being handled.
  2. The user must be able to hide and show the private space container.
  3. The user must be able to lock and unlock the private space container. Use the requestQuietModeEnabled() method to lock (by passing true) or unlock (by passing false) the private space.
  4. While locked, no apps in the private space container should be visible or discoverable through mechanisms such as search. Your app should register a receiver for the ACTION_PROFILE_AVAILABLE and ACTION_PROFILE_UNAVAILABLE broadcasts and update the UI in your app when the locked or unlocked state of the private space container changes. Both of these broadcasts include EXTRA_USER, which your app can use to refer to the private profile user.

    You can also use the isQuietModeEnabled() method to check whether the private space profile is locked or not.

App store apps

The private space includes an "Install Apps" button that launches an implicit intent to install apps into the user's private space. In order for your app to receive this implicit intent, declare an <intent-filter> in your app's manifest file with a <category> of 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.