Cambios de comportamiento: todas las apps

La plataforma de Android 15 incluye cambios de comportamiento que podrían afectar tu app. Los siguientes cambios 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).

Benefits and performance gains

Devices configured with 16 KB page sizes use slightly more memory on average, but also gain various performance improvements for both the system and apps:

  • Lower app launch times while the system is under memory pressure: 3.16% lower on average, with more significant improvements (up to 30%) for some apps that we tested
  • Reduced power draw during app launch: 4.56% reduction on average
  • Faster camera launch: 4.48% faster hot starts on average, and 6.60% faster cold starts on average
  • Improved system boot time: improved by 8% (approximately 950 milliseconds) on average

These improvements are based on our initial testing, and results on actual devices will likely differ. We'll provide additional analysis of potential gains for apps as we continue our testing.

Check if your app is impacted

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 necesarios 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.

Medical apps

When a user locks the private space, all apps in the private space are stopped, and those apps can't perform foreground or background activities, including showing notifications. This behavior might critically impact the use and function of medical apps installed in the private space.

The private space setup experience warns users that the private space is not suitable for apps that need to perform critical foreground or background activities, such as showing notifications from medical apps. However, apps can't determine whether or not they're being used in the private space, so they can't show a warning to the user for this case.

For these reasons, if you develop a medical app, review how this feature might impact your app and take appropriate actions—such as informing your users not to install your app in the private space—to avoid disrupting critical app capabilities.

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

Se quitó el archivo de fuente de emojis heredado basado en PNG (NotoColorEmojiLegacy.ttf) y solo se dejó el archivo basado en vectores. A partir de Android 13 (nivel de API 33), el archivo de fuente de emojis que usa el renderizador de emojis del sistema cambió de un archivo basado en PNG a uno basado en vectores. El sistema retuvo el archivo de fuente heredado en Android 13 y 14 por motivos de compatibilidad, de modo que las apps con sus propios renderizadores de fuentes pudieran seguir usándolo hasta que pudieran actualizarse.

Para verificar si tu app se ve afectada, busca referencias al archivo NotoColorEmojiLegacy.ttf en el código de la app.

Puedes adaptar tu app de varias maneras:

  • Usa las APIs de la plataforma para la renderización de texto. Puedes renderizar texto en un Canvas con copia de seguridad de mapa de bits y usarlo para obtener una imagen sin procesar si es necesario.
  • Agrega compatibilidad con fuentes COLRv1 a tu app. La biblioteca de código abierto FreeType es compatible con COLRv1 en la versión 2.13.0 y versiones posteriores.
  • Como último recurso, puedes agrupar el archivo de fuente de emojis heredado (NotoColorEmoji.ttf) en tu APK, aunque, en ese caso, a tu app le faltarán las actualizaciones de emojis más recientes. Para obtener más información, consulta la página del proyecto de GitHub de Noto Emoji.

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 extiende aún más esta seguridad. En Android 15, no se pueden instalar apps con un targetSdkVersion inferior a 24. Exigir a las apps que cumplan con los niveles de API modernos ayuda a garantizar una mejor seguridad y privacidad.

El software malicioso a menudo apunta a niveles de API más bajos para evadir la seguridad y la privacidad protecciones 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 la seguridad y mejoras en la privacidad. Intentar instalar una app segmentada para una API inferior generará un error de instalación, con 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, todas las apps con un targetSdkVersion inferior de 24 permanecen 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

Seguridad y privacidad

Android 15 presenta medidas sólidas para combatir el fraude de contraseña de un solo uso (OTP) y proteger el contenido sensible del usuario, enfocándose en endurecer el servicio de objeto de escucha de notificaciones y las protecciones de uso compartido de pantalla. Entre las mejoras clave, se incluyen la ocultación de las OTP de las notificaciones a las que pueden acceder apps no confiables, la ocultación de las notificaciones durante la función de compartir pantalla y la protección de las actividades de la app cuando se publican OTP. El objetivo de estos cambios es proteger el contenido sensible del usuario de personas no autorizadas.

Los desarrolladores deben tener en cuenta lo siguiente para asegurarse de que sus apps sean compatibles con los cambios en Android 15:

Ocultación de OTP

Android impedirá que las apps no confiables que implementen un NotificationListenerService lean contenido sin censura de las notificaciones en las que se detectó una OTP. Las apps de confianza, como las asociaciones de administradores de dispositivos complementarios, están exentas de estas restricciones.

Protección de Compartir pantalla

  • El contenido de las notificaciones se oculta durante las sesiones de uso compartido de pantalla para preservar la privacidad del usuario. Si la app implementa setPublicVersion(), Android muestra la versión pública de la notificación, que sirve como notificación de reemplazo en contextos no seguros. De lo contrario, el contenido de la notificación se oculta sin ningún otro contexto.
  • El contenido sensible, como la entrada de contraseñas, se oculta a los usuarios remotos para evitar que se revele la información sensible del usuario.
  • Se ocultarán las actividades de las apps que publiquen notificaciones durante la función de Compartir pantalla en la que se haya detectado una OTP. El contenido de la app se oculta al visor remoto cuando se inicia.
  • Además de la identificación automática de campos sensibles de Android, los desarrolladores pueden marcar manualmente partes de su app como sensibles con setContentSensitivity, que se oculta a los usuarios remotos durante la función de compartir pantalla.
  • Los desarrolladores pueden activar o desactivar la opción Inhabilitar protecciones cuando compartes pantalla en Opciones para desarrolladores para quedar exentos de las protecciones de uso compartido de pantalla con fines de demostración o pruebas. La grabadora de pantalla predeterminada del sistema está exenta de estos cambios, ya que las grabaciones permanecen en el dispositivo.

Cámara y contenido multimedia

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

La reproducción de audio directa y la descarga invalidan las pistas de audio directas o descargadas que se abrieron 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 la IU del sistema

Android 15 incluye algunos cambios que tienen como objetivo crear una experiencia del usuario más coherente e intuitiva.

Se habilitaron las animaciones de retroceso predictivo para las apps que habilitaron la función.

A partir de Android 15, se quitó la opción para desarrolladores de 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 en las apps que habilitaron el gesto atrás predictivo por completo o a nivel de la actividad. Si tu app se ve afectada, realiza las siguientes acciones:

  • Asegúrate de que tu app se haya migrado correctamente para usar el gesto atrás predictivo.
  • Asegúrate de que las transiciones de fragmentos funcionen con la navegación con atrás predictivo.
  • Migra de las animaciones y las transiciones de framework, y usa transiciones de animador y androidx.
  • Migra de las pilas de actividades que FragmentManager no conoce. En su lugar, usa pilas de actividades administradas por FragmentManager o por el componente Navigation.

Se inhabilitan los widgets cuando el usuario fuerza la detención de una app

If a user force-stops an app on a device running Android 15, the system temporarily disables all the app's widgets. The widgets are grayed out, and the user cannot interact with them. This is because beginning with Android 15, the system cancels all an app's pending intents when the app is force-stopped.

The system re-enables those widgets the next time the user launches the app.

For more information, see Changes to package stopped state.

El chip de la barra de estado de proyección de medios 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.

Status bar chip for screen sharing, casting, and recording.

Verifica si tu app se verá afectada

De forma predeterminada, tu app incluye el chip de la barra de estado y suspende automáticamente la proyección de pantalla cuando se activa la pantalla de bloqueo.

Para obtener más información sobre cómo probar tu app para estos casos de uso, consulta Chip de la barra de estado y detención automática.

Restricciones de acceso a la red en segundo plano

En Android 15, las apps que inician una solicitud de red fuera de un ciclo de vida del proceso válido reciben una excepción. Por lo general, un UnknownHostException o algún otro IOException relacionado con el zócalo. Por lo general, las solicitudes de red que se producen fuera de un ciclo de vida válido se deben a que las apps continúan una solicitud de red sin saberlo, incluso después de que la app ya no está activa.

Para mitigar esta excepción, asegúrate de que tus solicitudes de red sean conscientes del ciclo de vida y se cancelen cuando salgan de un ciclo de vida de proceso válido con componentes conscientes del ciclo de vida. Si es importante que la solicitud de red se realice incluso cuando el usuario salga de la aplicación, considera programar la solicitud de red con WorkManager o continuar una tarea visible para el usuario con el servicio en primer plano.

Bajas

Con cada actualización, es posible que las APIs específicas de Android queden obsoletas o deban refactorizarse a fin de 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 destacadas en esta versión de Android, consulta la página de bajas.