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 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
Android 过去仅支持 4 KB 内存页面大小, 优化了系统内存性能,以针对 Android 设备通常具备的功能。从 Android 15 开始,AOSP 支持 配置为使用 16 KB (16 KB) 页面大小的设备 设备)。如果您的应用使用任何 NDK 库,请直接使用 或者通过 SDK 间接创建,那么,您需要重新构建自己的应用 支持这些 16KB 设备。
随着设备制造商不断打造出 物理内存 (RAM),许多此类设备都会采用 16KB(以及 页面大小以优化设备的性能。正在添加 支持 16 KB 页面大小的设备,可使您的应用在这些设备上运行 并有助于您的应用从相关的广告效果中获益 改进。如果不重新编译,应用可能无法在 16KB 设备上运行 在未来的 Android 版本中正式推出。
为帮助您为应用添加支持,我们提供了有关如何检查 如果您的应用受到影响 重新构建您的应用(如果适用),以及如何在 Google Play 中 使用模拟器(包括 Android 15)的 16 KB 环境 系统映像)。
Aumento de los beneficios y del rendimiento
配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:
- 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
- 应用启动期间的功耗降低:平均降低了 4.56%
- 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
- 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)
这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。
Verifica si el cambio afecta a tu app
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 les permite a los usuarios crear un espacio separado en su dispositivo donde puedan mantener alejadas las aplicaciones sensibles de las miradas indiscretas, con una capa adicional de autenticación. Debido a que las apps de el espacio privado tienen visibilidad restringida, algunos tipos de aplicaciones deben ocupar pasos adicionales para poder ver las apps e interactuar con ellas en la privacidad espacio.
Todas las apps
Como las aplicaciones en el espacio privado se guardan en un perfil de usuario independiente, las apps a los perfiles de trabajo, las apps no deberían dar por sentado que cualquier copias de la app que no están en el perfil principal se encuentran en el perfil de trabajo. Si Tu app tiene una lógica relacionada con apps de perfil de trabajo que suponen esto. tendrás que ajustar esta lógica.
Apps médicas
Cuando un usuario bloquea el espacio privado, se detienen todas las apps que este contiene y esas apps no pueden realizar actividades en primer o segundo plano, lo que incluye mostrando notificaciones. Este comportamiento puede tener un impacto crítico en el uso 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 está Adecuado para apps que necesiten realizar tareas esenciales en primer o segundo plano actividades, como mostrar notificaciones de aplicaciones médicas. Sin embargo, las apps no pueden determinar si se usan en el espacio privado por lo que no puede mostrar una advertencia para este caso.
Por estos motivos, si desarrollas una app médica, revisa las posibles afectar tu app y tomar las medidas adecuadas, como informar a los usuarios que no instalar tu aplicación en el espacio privado, para no interrumpir la aplicación capacidades de integración.
Apps de lanzamiento
Si desarrollas una app de selector, debes hacer lo siguiente antes que las apps en la el espacio privado estarán visibles:
- Tu app debe estar asignada como la app de selector predeterminada del dispositivo; de esta forma,
es poseer el rol
ROLE_HOME
. - Tu app debe declarar el
ACCESS_HIDDEN_PROFILES
. el permiso normal en el archivo de manifiesto de tu app.
Las apps de Launcher 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
espacio privado. Usa el método
getLauncherUserInfo()
para determinar qué tipo de perfil de usuario se administra. - El usuario debe poder ocultar y mostrar el contenedor del espacio privado.
- El usuario debe poder bloquear y desbloquear el contenedor del espacio privado. Usa
el método
requestQuietModeEnabled()
para bloquear (por pasandotrue
) o desbloquear (pasandofalse
) el espacio privado. Mientras esté bloqueado, ninguna app en el contenedor del espacio privado debe estar visible o detectable a través de mecanismos como la búsqueda. Tu app debe registrar un receptor de la
ACTION_PROFILE_AVAILABLE
yACTION_PROFILE_UNAVAILABLE
y actualiza la IU de tu app cuando el estado bloqueado o desbloqueado del espacio privado los cambios del contenedor. Ambas transmisiones incluyenEXTRA_USER
, que tu app puede usar para hacer referencia a la usuario de perfil privado.También puedes usar el método
isQuietModeEnabled()
para Comprobar si el perfil del espacio privado está bloqueado o no.
Apps de tiendas de aplicaciones
El espacio privado incluye la opción "Instalar apps" botón que lanza una acción
para instalar apps en el espacio privado del usuario. Para que tu app pueda
para recibir 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
The legacy, PNG-based emoji font file (NotoColorEmojiLegacy.ttf
) has been
removed, leaving just the vector-based file. Beginning with Android 13 (API
level 33), the emoji font file used by the system emoji renderer changed from a
PNG-based file to a vector based file. The system retained
the legacy font file in Android 13 and 14 for compatibility reasons, so that
apps with their own font renderers could continue to use the legacy font file
until they were able to upgrade.
To check if your app is affected, search your app's code for references to the
NotoColorEmojiLegacy.ttf
file.
You can choose to adapt your app in a number of ways:
- Use platform APIs for text rendering. You can render text to a bitmap-backed
Canvas
and use that to get a raw image if necessary. - Add COLRv1 font support to your app. The FreeType open source library supports COLRv1 in version 2.13.0 and higher.
- As a last resort, you can bundle the legacy emoji font file
(
NotoColorEmoji.ttf
) into your APK, although in that case your app will be missing the latest emoji updates. For more information, see the Noto Emoji GitHub project page.
Se aumentó la versión mínima del SDK de destino 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 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.
Before Android 15, if an app requested direct or offload audio playback while
another app was playing audio and the resource limits were reached, the app
would fail to open a new AudioTrack
.
Beginning with Android 15, when an app requests direct or offload
playback and the resource
limits are reached, the system invalidates any currently open
AudioTrack
objects which prevent fulfilling the new track request.
(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)
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
Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:
- Ensure that your app has been properly migrated to use the predictive back gesture.
- Ensure that your fragment transitions work with predictive back navigation.
- Migrate away from animation and framework transitions and use animator and androidx transitions instead.
- Migrate away from back stacks that
FragmentManager
doesn't know about. Use back stacks managed byFragmentManager
or by the Navigation component instead.
Widgets inhabilitados 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.
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
Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared. Android has until now shown screen cast and screen record icons on the status bar, but the icons are small and often overlooked. Also, stopping screen sharing or recording is cumbersome because controls are in Quick Settings.
Android 15 introduces a new status bar chip that is large and prominent, which should alert users to any in-progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded.
To provide an intuitive user experience, screen projection now automatically stops when the device screen is locked.
Benefits and performance gains
The new media projection status bar chip enhances the user experience as follows:
- Alerts users to in-progress screen sharing, casting, or recording
- Enable users to terminate screen projection by tapping the chip
Automatic suspension of screen projection when the device screen is locked ensures user privacy.
Check if your app is impacted
By default, your app includes the new status bar chip and automatically suspends
screen projection when the lock screen activates. Test your app by implementing
the
onStop()
method of the
MediaProjection.Callback
.
Verify that your app responds appropriately when the screen projection stops as
a result of the user tapping the status bar chip or when the lock screen
activates.
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.