La plataforma de Android 15 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 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 amplía varias funciones 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 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
Hasta ahora, Android solo admitía tamaños de página de memoria de 4 KB, que tienen rendimiento optimizado de la memoria del sistema para la cantidad promedio de memoria total que Los dispositivos Android solían tener. A partir de Android 15, AOSP admite dispositivos configurados para usar un tamaño de página de 16 KB (16 KB) dispositivos). Si tu app usa bibliotecas del NDK, hazlo directamente o indirectamente a través de un SDK, tendrás que recompilar tu app para que Funciona en estos dispositivos de 16 KB.
A medida que los fabricantes siguen creando dispositivos con mayores cantidades memoria física (RAM), muchos de estos dispositivos adoptarán 16 KB (y eventualmente mayores) para optimizar el rendimiento del dispositivo. Agregando la compatibilidad con dispositivos de tamaño de página de 16 KB permite que tu app se ejecute en estos y ayuda a que tu app se aproveche del rendimiento asociado mejoras continuas. Sin la recompilación, es posible que las apps no funcionen en dispositivos de 16 KB. cuando se producen en versiones futuras de Android.
Para ayudarte a que tu aplicación sea compatible, proporcionamos orientación sobre cómo verificar si tu app se ve afectada, cómo volver a compilar tu app (si corresponde) y saber cómo probarla en un entorno de 16 KB con emuladores (incluido Android 15 imágenes del sistema 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 volver a compilarla con compatibilidad para dispositivos de 16 KB. Si no estás seguro de si tu app usa código nativo, puedes usar el Analizador de APK para identificar si hay código nativo y, luego, revisar la alineación de los segmentos ELF para detectar bibliotecas compartidas.
Si tu app solo usa código escrito en el lenguaje de programación Java o Kotlin, incluidos todos los SDKs y las bibliotecas, quiere decir que 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:
- Tu app debe asignarse como la app de selector predeterminado del dispositivo, es decir, debe tener el rol
ROLE_HOME
. - 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:
- 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. - El usuario debe poder ocultar y mostrar el contenedor de espacio privado.
- El usuario debe poder bloquear y desbloquear el contenedor de espacio privado. Usa el método
requestQuietModeEnabled()
para bloquear (pasandotrue
) o desbloquear (pasandofalse
) el espacio privado. 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
yACTION_PROFILE_UNAVAILABLE
, y actualizar la IU en tu app cuando cambie el estado de bloqueo o desbloqueo del contenedor de espacio privado. Ambas transmisiones incluyenEXTRA_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
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 el contenido multimedia para todas las apps.
La reproducción de audio directo y de descarga invalida las pistas de audio directo o de descarga 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 que tienen como objetivo crear una experiencia del usuario más intuitiva y coerente.
Animaciones de retroceso predictivo habilitadas para las apps que habilitaron esta 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 porFragmentManager
o por el componente Navigation.
Widgets inhabilitados cuando el usuario fuerza la detención de una app
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 multimedia alerta a los usuarios sobre el uso compartido de pantalla, la transmisión y la grabación
Beneficios y mejoras de rendimiento
Verifica si tu app se ve afectada
Bajas
Con cada actualización, es posible que las APIs específicas de Android queden obsoletas o deban refactorizarse para brindar 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.