La plate-forme Android 15 apporte des modifications de comportement susceptibles d'affecter votre application. Les modifications de comportement suivantes s'appliquent à toutes les applications lorsqu'elles s'exécutent sur Android 15, peu importe la targetSdkVersion
. Vous devez tester votre application, puis la modifier si nécessaire afin de prendre en charge ces modifications, le cas échéant.
Veillez également à consulter la liste des modifications de comportement qui n'affectent que les applications ciblant Android 15.
Fonctionnalité de base
Android 15 modifie ou étend diverses fonctionnalités de base du système Android.
Modifications apportées à l'état d'arrêt du package
The intention of the package FLAG_STOPPED
state (which users
can engage in AOSP builds by long-pressing an app icon and selecting "Force
Stop") has always been to keep apps in this state until the user explicitly
removes the app from this state by directly launching the app or indirectly
interacting with the app (through the sharesheet or a widget, selecting the app
as live wallpaper, etc.). In Android 15, we've updated the behavior of the
system to be aligned with this intended behavior. Apps should only be removed
from the stopped state through direct or indirect user action.
To support the intended behavior, in addition to the existing restrictions, the
system also cancels all pending intents when the app enters the
stopped state on a device running Android 15. When the user's actions remove the
app from the stopped state, the ACTION_BOOT_COMPLETED
broadcast is delivered to the app providing an opportunity to re-register any
pending intents.
You can call the new
ApplicationStartInfo.wasForceStopped()
method to confirm whether the app was put into the stopped state.
Compatibilité avec les tailles de page de 16 ko
Auparavant, Android n'acceptait que des pages de 4 Ko de mémoire, ce qui optimisée des performances de la mémoire système pour la quantité moyenne de mémoire totale les appareils Android ont généralement eu. À partir d'Android 15, AOSP prend en charge appareils configurés pour utiliser une taille de page de 16 Ko appareils). Si votre application utilise des bibliothèques du NDK, directement ou indirectement via un SDK, vous devez recompiler votre application pour qu'elle fonctionnent sur ces appareils de 16 Ko.
Alors que les fabricants d’appareils continuent à construire des appareils avec de plus grandes quantités mémoire physique (RAM), un grand nombre de ces appareils adopteront un débit de 16 Ko (et et éventuellement plus) pour optimiser les performances de l'appareil. Ajout... la compatibilité avec les appareils dont la taille de page est de 16 Ko permet à votre application de s'exécuter sur ces appareils et aide votre application à bénéficier des performances associées et d'améliorations. Sans recompilation, les applications risquent de ne pas fonctionner sur les appareils de 16 Ko. lorsqu'ils seront mis en production dans les prochaines versions d'Android.
Pour vous aider à proposer la prise en charge de votre application, nous vous fournissons des conseils sur la façon de vérifier si votre application est concernée, comment recompilez votre application (le cas échéant) et comment la tester dans un environnement de 16 Ko utilisant des émulateurs (y compris Android 15) ; images système pour Android Emulator).
Avantages et gains de performances
Les appareils configurés avec une taille de page de 16 Ko utilisent un peu plus de mémoire en moyenne, mais bénéficient également de diverses améliorations des performances pour le système et les applications:
- Temps de lancement des applications plus courts lorsque le système est soumis à une pression de mémoire: 3,16 % de moins en moyenne, avec des améliorations plus importantes (jusqu'à 30%) pour certaines applications que nous avons testées
- Consommation d'énergie réduite au démarrage de l'application: réduction de 4,56% en moyenne
- Lancement plus rapide de l'appareil photo: démarrage à chaud 4,48% plus rapide en moyenne et démarrage à froid 6,60% plus rapide en moyenne
- Amélioration du temps de démarrage du système: 8% (environ 950 millisecondes) en moyenne
Ces améliorations sont basées sur nos premiers tests. Les résultats sur les appareils réels seront probablement différents. Nous fournirons une analyse supplémentaire des gains potentiels pour les applications à mesure que nous poursuivrons nos tests.
Vérifier si votre application est concernée
Si votre application utilise du code natif, vous devez la recompiler pour qu'elle soit compatible avec les appareils 16 ko. Si vous n'êtes pas sûr que votre application utilise du code natif, vous pouvez utiliser l'analyseur d'APK pour identifier la présence de code natif, puis vérifier l'alignement des segments ELF pour toutes les bibliothèques partagées que vous trouvez.
Si votre application n'utilise que du code écrit en langage de programmation Java ou Kotlin, y compris tous ses SDK et bibliothèques, elle est déjà compatible avec les appareils 16 ko. Toutefois, nous vous recommandons de tester votre application dans un environnement de 16 ko pour vérifier qu'il n'y a pas de régressions inattendues dans le comportement de l'application.
Modifications requises pour que certaines applications soient compatibles avec l'espace privé
L'espace privé est une nouvelle fonctionnalité d'Android 15 qui permet aux utilisateurs de créer un espace distinct sur leur appareil où ils peuvent protéger les applications sensibles des regards indiscrets, sous une couche d'authentification supplémentaire. Parce que les applications l'espace privé ont une visibilité limitée, certains types d'applications doivent des étapes supplémentaires pour pouvoir voir les applications et interagir avec elles dans les applications espace.
Toutes les applications
Comme les applis de l'espace privé sont conservées dans un profil utilisateur distinct, aux profils professionnels, les applications ne doivent pas supposer qu'aucune des copies de son application qui ne figurent pas dans le profil principal sont dans le profil professionnel. Si votre application a une logique liée aux applications du profil professionnel qui font cette hypothèse : vous devrez ajuster cette logique.
Applis - Médecine
Lorsqu'un utilisateur verrouille l'espace privé, toutes les applications de l'espace privé sont arrêtées et ne peuvent pas effectuer d'activités de premier plan ni d'arrière-plan, y compris afficher des notifications. Ce comportement peut avoir un impact critique sur l'utilisation et le fonctionnement des applications médicales installées dans l'espace privé.
L'expérience de configuration de l'espace privé avertit les utilisateurs que l'espace privé n'est pas convient aux applications qui doivent exécuter des opérations critiques au premier plan ou en arrière-plan activités, comme l'affichage de notifications d'applications médicales. Toutefois, les applications ne peuvent pas déterminer si elles sont utilisées ou non dans l'espace privé, il ne peut donc pas afficher d'avertissement à l'utilisateur pour ce cas.
Pour toutes ces raisons, si vous développez une application médicale, examinez impacter votre application et prendre les mesures appropriées, par exemple en informant vos utilisateurs de ne pas Installez votre application dans l'espace privé, pour éviter de perturber l'application critique. des fonctionnalités.
Applications de lanceur
Si vous développez une application de lanceur d'applications, vous devez effectuer les opérations suivantes pour que les applications de l'espace privé soient visibles :
- Votre application doit être définie comme application de lanceur par défaut de l'appareil, c'est-à-dire qu'elle doit posséder le rôle
ROLE_HOME
. - Votre application doit déclarer l'
ACCESS_HIDDEN_PROFILES
autorisation normale dans le fichier manifeste de votre application.
Les applications de lanceur d'applications qui déclarent l'autorisation ACCESS_HIDDEN_PROFILES
doivent gérer les cas d'utilisation de l'espace privé suivants :
- Votre application doit disposer d'un conteneur de lanceur distinct pour les applications installées dans l'espace privé. Utilisez la méthode
getLauncherUserInfo()
pour déterminer quel type de profil utilisateur est géré. - L'utilisateur doit pouvoir masquer et afficher le conteneur de l'espace privé.
- L'utilisateur doit pouvoir verrouiller et déverrouiller le conteneur de l'espace privé. Utilisez
la méthode
requestQuietModeEnabled()
pour verrouiller en transmettanttrue
) ou déverrouillez (en transmettantfalse
) l'espace privé. Lorsqu'il est verrouillé, aucune application du conteneur de l'espace privé ne doit être visible ni détectable par des mécanismes tels que la recherche. Votre application doit enregistrer un récepteur pour les diffusions
ACTION_PROFILE_AVAILABLE
etACTION_PROFILE_UNAVAILABLE
, et mettre à jour l'UI de votre application lorsque l'état verrouillé ou déverrouillé du conteneur de l'espace privé change. Ces deux diffusions incluentEXTRA_USER
, que votre application peut utiliser pour faire référence à l'utilisateur du profil privé.Vous pouvez également utiliser la méthode
isQuietModeEnabled()
pour vérifier si le profil de l'espace privé est verrouillé ou non.
Applications de plate-forme de téléchargement d'applications
L'espace privé inclut un bouton "Installer des applications" qui lance une intention implicite pour installer des applications dans l'espace privé de l'utilisateur. Pour que votre application
recevez cet intent implicite, déclarez un objet <intent-filter>
.
dans le fichier manifeste de votre application avec une valeur <category>
de
CATEGORY_APP_MARKET
Suppression de la police d'emoji basée sur le format 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.
Augmentation de la version minimale du SDK cible de 23 à 24
Android 15 builds on the
the changes that were made in Android 14 and extends this
security further. In Android 15, apps with a
targetSdkVersion
lower than 24 can't be installed.
Requiring apps to meet modern API levels helps to ensure better security and
privacy.
Malware often targets lower API levels in order to bypass security and privacy
protections that have been introduced in higher Android versions. For example,
some malware apps use a targetSdkVersion
of 22 to avoid being subjected to the
runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API
level 23). This Android 15 change makes it harder for malware to avoid security
and privacy improvements. Attempting to install an app targeting a lower API
level results in an installation failure, with a message like the following one
appearing in Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7
On devices upgrading to Android 15, any apps with a targetSdkVersion
lower
than 24 remain installed.
If you need to test an app targeting an older API level, use the following ADB command:
adb install --bypass-low-target-sdk-block FILENAME.apk
Sécurité et confidentialité
Android 15 introduit des mesures robustes pour lutter contre la fraude par code secret à usage unique (OTP) et protéger le contenu sensible de l'utilisateur, en se concentrant sur le renforcement des protections du service Notification Listener et du partage d'écran. Parmi les principales améliorations, citons la suppression des codes OTP des notifications accessibles aux applications non approuvées, le masquage des notifications lors du partage d'écran et la sécurisation des activités des applications lorsque des codes OTP sont publiés. Ces modifications visent à protéger le contenu sensible de l'utilisateur contre les acteurs non autorisés.
Les développeurs doivent tenir compte des points suivants pour s'assurer que leurs applications sont compatibles avec les modifications apportées à Android 15:
Masquage de l'OTP
Android empêche les applications non approuvées qui implémentent un NotificationListenerService
de lire le contenu non masqué des notifications dans lesquelles un code OTP a été détecté. Ces restrictions ne s'appliquent pas aux applications de confiance telles que les associations de gestionnaires d'appareils associés.
Protection du partage d'écran
- Le contenu des notifications est masqué pendant les sessions de partage d'écran afin de préserver la confidentialité de l'utilisateur. Si l'application implémente
setPublicVersion()
, Android affiche la version publique de la notification, qui sert de notification de remplacement dans les contextes non sécurisés. Sinon, le contenu de la notification est masqué sans autre contexte. - Les contenus sensibles, comme la saisie de mots de passe, sont masqués pour les spectateurs à distance afin d'éviter de révéler les informations sensibles de l'utilisateur.
- Les activités des applications qui publient des notifications pendant le partage d'écran où un code OTP a été détecté sont masquées. Le contenu de l'application est masqué pour le téléspectateur à distance lors du lancement.
- En plus de l'identification automatique des champs sensibles par Android, les développeurs peuvent marquer manuellement des parties de leur application comme sensibles à l'aide de
setContentSensitivity
, qui sont masquées pour les spectateurs à distance lors du partage d'écran. - Les développeurs peuvent activer ou désactiver l'option Désactiver les protections lors du partage d'écran sous Options pour les développeurs afin d'être exemptés des protections lors du partage d'écran à des fins de démonstration ou de test. L'enregistreur d'écran système par défaut est exempté de ces modifications, car les enregistrements restent sur l'appareil.
Appareil photo et médias
Android 15 apporte les modifications suivantes au comportement de l'appareil photo et des contenus multimédias pour toutes les applications.
La lecture audio directe et hors connexion invalide les pistes audio directes ou hors connexion précédemment ouvertes lorsque les limites de ressources sont atteintes
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.)
Expérience utilisateur et interface utilisateur du système
Android 15 inclut des modifications visant à créer une expérience utilisateur plus cohérente et intuitive.
Animations pour prévisualiser le retour en arrière activées pour les applications qui ont activé cette fonctionnalité
À partir d'Android 15, l'option pour les développeurs pour les animations de prévisualisation du Retour a été supprimée. Les animations système telles que le retour à l'écran d'accueil, le multitâche et l'activité multi-activité s'affichent désormais pour les applications qui ont activé la prévisualisation du geste Retour soit entièrement, soit au niveau de l'activité. Si votre application est concernée, procédez comme suit:
- Assurez-vous que votre application a bien été migrée pour utiliser la prévisualisation du geste Retour.
- Assurez-vous que vos transitions de fragment fonctionnent avec la navigation avec prévisualisation du Retour.
- Abandonnez les transitions d'animation et de framework, et utilisez plutôt les transitions d'animateur et d'androidx.
- Éloignez-vous des piles "Retour" que
FragmentManager
n'a pas connaissance. Utilisez plutôt des piles "Retour" gérées parFragmentManager
ou par le composant Navigation.
Widgets désactivés lorsque l'utilisateur arrête de forcer une application
Si un utilisateur force l'arrêt d'une application sur un appareil exécutant Android 15, le système désactive temporairement tous les widgets de l'application. Les widgets sont grisés et l'utilisateur ne peut pas interagir avec eux. En effet, à partir d'Android 15, le système annule tous les intents en attente d'une application lorsque celle-ci est arrêtée de force.
Le système les réactivera la prochaine fois que l'utilisateur lancera l'application.
Pour en savoir plus, consultez Modifications de l'état d'arrêt d'un package.
Chip de la barre d'état de la projection multimédia pour avertir les utilisateurs du partage d'écran, du cast et de l'enregistrement
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.
Abandons
À chaque version, des API Android spécifiques peuvent devenir obsolètes ou nécessiter un refactoring pour offrir une meilleure expérience aux développeurs ou prendre en charge de nouvelles fonctionnalités de la plate-forme. Dans ce cas, nous abandonnons officiellement les API obsolètes et orientons les développeurs vers d'autres API à utiliser à la place.
La mise à l'écart signifie que nous avons mis fin à la prise en charge officielle des API, mais qu'elles resteront disponibles pour les développeurs. Pour en savoir plus sur les abandons notables de cette version d'Android, consultez la page des abandons.