Comme dans les versions précédentes, Android 15 apporte des modifications de comportement susceptibles d'affecter votre application. Les modifications de comportement suivantes s'appliquent exclusivement aux applications qui ciblent Android 15 ou version ultérieure. Si votre application cible Android 15 ou une version ultérieure, vous devez la modifier pour qu'elle prenne en charge ces comportements, le cas échéant.
Veillez également à consulter la liste des modifications de comportement qui affectent toutes les applications exécutées sur Android 15, quel que soit le targetSdkVersion
de votre application.
Fonctionnalité de base
Android 15 modifie ou étend diverses fonctionnalités de base du système Android.
Modifications apportées aux services de premier plan
Nous apportons les modifications suivantes aux services de premier plan avec Android 15.
- Nouveau type de service de premier plan pour le traitement multimédia
- Restrictions concernant les broadcast receivers
BOOT_COMPLETED
qui lancent les services de premier plan
Nouveau type de service de premier plan pour le traitement multimédia
Android 15 introduit un nouveau type de service de premier plan, mediaProcessing
. Ce type de service est adapté à des opérations telles que le transcodage de fichiers multimédias. Par exemple, une application multimédia peut télécharger un fichier audio et doit le convertir dans un autre format avant de le lire. Vous pouvez utiliser un service de premier plan mediaProcessing
pour vous assurer que la conversion se poursuit même lorsque l'application est exécutée en arrière-plan.
Pour en savoir plus sur le type de service mediaProcessing
, consultez Modifications apportées aux types de services de premier plan pour Android 15.
Restrictions concernant les broadcast receivers BOOT_COMPLETED
qui lancent les services de premier plan
De nouvelles restrictions s'appliquent aux broadcast receivers BOOT_COMPLETED
qui lancent les services de premier plan. Les récepteurs BOOT_COMPLETED
ne sont pas autorisés à lancer les types de services de premier plan suivants:
dataSync
camera
mediaPlayback
phoneCall
mediaProjection
microphone
(cette restriction s'applique àmicrophone
depuis Android 14)
Si un récepteur BOOT_COMPLETED
tente de lancer l'un de ces types de services de premier plan, le système génère une erreur ForegroundServiceStartNotAllowedException
.
Gestion des clés pour le chiffrement de bout en bout
Nous lançons E2eeContactKeysManager
dans Android 15, qui facilite le chiffrement de bout en bout dans vos applications Android en fournissant une API au niveau du système d'exploitation pour le stockage des clés publiques cryptographiques.
E2eeContactKeysManager
est conçu pour s'intégrer à l'application de contacts de la plate-forme afin d'offrir aux utilisateurs un moyen centralisé de gérer et de valider les clés publiques de leurs contacts.
Expérience utilisateur
Android 15 inclut des modifications destinées à créer une expérience utilisateur plus cohérente et intuitive.
Modifications des encarts de fenêtre
Deux modifications liées à l'encart de fenêtre vont être apportées dans Android 15. Dans la version bêta 1, la technologie bord à bord sera appliquée. La configuration sera également modifiée, y compris la configuration par défaut des barres système.
Application bord à bord
Les applications sont bord à bord par défaut sur les appareils Android 15 et versions ultérieures après avoir ciblé le SDK 35.
Il s'agit d'une modification destructive qui pourrait avoir un impact négatif sur l'UI de votre application. Voici les modifications apportées:
- Barre de navigation avec poignée de gestes
- Transparence par défaut.
- Le décalage inférieur est désactivé, de sorte que le contenu s'affiche derrière la barre de navigation du système, sauf si des encarts sont appliqués.
setNavigationBarColor
etR.attr#navigationBarColor
sont obsolètes et n'affectent pas la navigation par gestes.setNavigationBarContrastEnforced
etR.attr#navigationBarContrastEnforced
n'ont toujours aucun effet sur la navigation par gestes.
- Navigation à trois boutons
- Opacité définie sur 80% par défaut, la couleur correspondant peut-être à l'arrière-plan de la fenêtre.
- Le décalage inférieur est désactivé, de sorte que le contenu s'affiche derrière la barre de navigation du système, sauf si des encarts sont appliqués.
setNavigationBarColor
etR.attr#navigationBarColor
sont définis par défaut pour correspondre à l'arrière-plan de la fenêtre. L'arrière-plan de la fenêtre doit être un drawable en couleur pour que cette valeur par défaut s'applique. Cette API est obsolète, mais continue d'affecter la navigation à trois boutons.setNavigationBarContrastEnforced
etR.attr#navigationBarContrastEnforced
sont "true" par défaut, ce qui ajoute un arrière-plan opaque de 80 % pour la navigation à trois boutons.
- Barre d'état
- Transparence par défaut.
- Le décalage supérieur est désactivé, de sorte que le contenu s'affiche derrière la barre d'état, sauf si des encarts sont appliqués.
setStatusBarColor
etR.attr#statusBarColor
sont obsolètes et n'ont aucun effet sur Android 15.setStatusBarContrastEnforced
etR.attr#statusBarContrastEnforced
sont obsolètes, mais affectent toujours Android 15.
- Encoche
layoutInDisplayCutoutMode
des fenêtres non flottantes doit êtreLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
. Sinon, les applications planteront avec une exception IllegalArgumentException. ALWAYS (TOUJOURS) est la seule option autorisée pour que les utilisateurs ne voient pas de barre noire causée par l'encoche en mode Paysage, qui s'affiche donc bord à bord.
L'exemple suivant montre une application avant et après le ciblage du SDK 35, et avant et après l'application des encarts.
Si votre application:
- est déjà bord à bord et applique des encarts, votre compte n'est généralement pas impacté, sauf dans les scénarios suivants. Toutefois, même si vous pensez que cela ne vous concerne pas, nous vous recommandons de tester votre application.
- Votre application plante, car vous avez une fenêtre non flottante, telle qu'une activité qui utilise
SHORT_EDGES, NEVER
ouDEFAULT
au lieu deLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
. Si votre application plante au lancement, cela peut être dû à votre écran de démarrage. En attendant qu'un correctif soit disponible, définissezwindow.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutInDisplayCutoutMode.always
. - L'interface utilisateur peut être masquée. Vérifiez que l'interface utilisateur n'est pas masquée sur ces écrans moins consultés. Les écrans à faible trafic incluent :
- Écrans d'intégration ou de connexion
- Pages de paramètres
- Votre application plante, car vous avez une fenêtre non flottante, telle qu'une activité qui utilise
- n'est pas bord à bord, il est très probable que cela vous concerne. En plus des scénarios pour les applications déjà bord à bord, vous devez tenir compte des points suivants :
- Si votre application utilise des composants Material 3 (androidx.compose.material3) dans Compose, tels que
TopAppBar, BottomAppBar
etNavigationBar
, ces composants ne sont probablement pas affectés, car ils gèrent automatiquement les encarts. - Si votre application utilise des composants Material 2 (androidx.compose.material) dans Compose, ces composants ne gèrent pas automatiquement les encarts. Toutefois, vous pouvez accéder aux encarts et les appliquer manuellement. Dans androidx.compose.material 1.6.0 et les versions ultérieures, utilisez le paramètre windowInsets pour appliquer manuellement les encarts pour
BottomAppBar
,TopAppBar
,BottomNavigation
etNavigationRail
. De même, utilisez le paramètrecontentWindowInsets
pour Scaffold. - Si votre application utilise des vues et des composants Material (com.google.android.material), la plupart des composants Material basés sur les vues tels que
BottomNavigationView
,BottomAppBar
,NavigationRailView
ouNavigationView
gèrent les encarts et ne nécessitent aucune action supplémentaire. Toutefois, vous devez ajouterandroid:fitsSystemWindows="true"
si vous utilisezAppBarLayout
. - Pour les composables personnalisés, appliquez les encarts manuellement en tant que marge intérieure. Si votre contenu se trouve dans un échafaudage, vous pouvez utiliser des encarts à l'aide des valeurs de marge intérieure de l'échafaudage. Sinon, appliquez une marge intérieure à l'aide de l'une des options
WindowInsets
. - Si votre application utilise des vues et BottomSheet, SideSheet ou des conteneurs personnalisés, appliquez une marge intérieure à l'aide de
ViewCompat.setOnApplyWindowInsetsListener
. Pour RecyclerView, appliquez une marge intérieure à l'aide de cet écouteur et ajoutez égalementclipToPadding="false"
.
- Si votre application utilise des composants Material 3 (androidx.compose.material3) dans Compose, tels que
- doivent offrir une protection personnalisée en arrière-plan pour la navigation à trois boutons ou la barre d'état, votre application doit placer un composable ou une vue derrière la barre système à l'aide de
WindowInsets.Type#tappableElement()
pour obtenir la hauteur de la barre de navigation à trois boutons ouWindowInsets.Type#statusBars
.
Pour en savoir plus sur l'application d'encarts, consultez les guides Vues Edge to Edge et Edge to Edge Compose.
Voici la liste des API obsolètes et désactivées:
- R.attr#statusBarColor
- R.attr#navigationBarColor
- R.attr#navigationBarDividerColor
- Window#setDecorFitsSystemWindows
- Fenêtre#setStatusBarColor
- Fenêtre#setStatusBarContrastEnforced
- Fenêtre#setNavigationBarColor
- Fenêtre#setNavigationBarDividerColor
- Fenêtre#getStatusBarColor
- Fenêtre#getStatusBarContrastEnforced
- Fenêtre#getNavigationBarColor
- Fenêtre#getNavigationBarDividerColor
Configuration stable
Cette modification ne peut pas être testée dans la version bêta 1, mais elle le sera bientôt.
Si votre application cible Android 15 ou une version ultérieure, Configuration
n'exclut plus les barres système. Si vous utilisez la taille d'écran dans la classe Configuration
pour calculer la mise en page, vous devez la remplacer par de meilleures alternatives, telles que ViewGroup
, WindowInsets
ou WindowMetricsCalculator
, selon vos besoins.
Configuration
est disponible depuis l'API 1. Elle est généralement obtenue à partir de Activity.onConfigurationChanged
. Elle fournit des informations telles que la densité, l'orientation et les tailles de la fenêtre. Une caractéristique importante des tailles de fenêtre renvoyées par Configuration
est qu'elle excluait auparavant les barres système.
La taille de la configuration est généralement utilisée pour sélectionner des ressources, par exemple /res/layout-h500dp
, et cela reste un cas d'utilisation valide. Cependant, son utilisation pour calculer la mise en page a toujours été déconseillée. Si vous le faites, vous devez
vous en éloigner maintenant. Vous devez remplacer l'utilisation de Configuration
par quelque chose de plus adapté à votre cas d'utilisation.
Si vous l'utilisez pour calculer la mise en page, utilisez un ViewGroup
approprié tel que CoordinatorLayout
ou ConstraintLayout
. Si vous l'utilisez pour déterminer la hauteur de la barre de navigation du système, utilisez WindowInsets
. Si vous souhaitez connaître la taille actuelle de la fenêtre de votre application, utilisez computeCurrentWindowMetrics
.
La liste suivante décrit les champs concernés par cette modification:
- Les tailles
Configuration.screenWidthDp
etscreenHeightDp
n'excluent plus les barres système. Configuration.smallestScreenWidthDp
est indirectement affecté par les modifications apportées àscreenWidthDp
etscreenHeightDp
.Configuration.orientation
est indirectement affecté par les modifications apportées àscreenWidthDp
etscreenHeightDp
sur les appareils proches du carré.Display.getSize(Point)
est indirectement affecté par les modifications apportées à la configuration. Cette fonctionnalité est obsolète depuis le niveau d'API 30.Display.getMetrics()
fonctionne déjà comme ceci depuis le niveau d'API 33.
L'attribut élégantTextHeight est défini par défaut sur "true"
Pour les applications ciblant Android 15, l'attribut elegantTextHeight
TextView
devient true
par défaut, en remplaçant la police compacte utilisée par défaut par certains scripts associés à de grandes métriques verticales par un autre plus lisible. La police compacte a été introduite pour éviter de perturber les mises en page. Android 13 (niveau d'API 33) empêche bon nombre de ces failles en permettant à la mise en page du texte d'étirer la hauteur verticale à l'aide de l'attribut fallbackLineSpacing
.
Dans Android 15, la police compacte reste dans le système. Votre application peut donc définir elegantTextHeight
sur false
pour obtenir le même comportement qu'auparavant, mais elle ne sera probablement pas compatible avec les prochaines versions. Ainsi, si votre application est compatible avec les scripts suivants (arabe, laotien, birman, gujarati, kannada, malayalam, odia, télougou ou thaï), testez-la en définissant elegantTextHeight
sur true
.
Mise à jour des restrictions non SDK
Android 15 inclut des listes à jour d'interfaces non SDK limitées grâce à la collaboration avec les développeurs Android et aux derniers tests internes. Dans la mesure du possible, nous nous assurons que des alternatives publiques sont disponibles avant de limiter les interfaces non SDK.
Si votre application ne cible pas Android 15, certaines de ces modifications ne vous affecteront peut-être pas immédiatement. Toutefois, bien qu'il soit possible pour votre application d'accéder à certaines interfaces non SDK en fonction du niveau d'API cible de votre application, l'utilisation d'une méthode ou d'un champ non SDK présente toujours un risque élevé d'endommager votre application.
Si vous ne savez pas si votre application utilise des interfaces non SDK, vous pouvez tester votre application pour le savoir. Si votre application repose sur des interfaces non SDK, vous devez commencer à planifier une migration vers des alternatives SDK. Néanmoins, nous comprenons que certaines applications ont des cas d'utilisation valides concernant l'utilisation d'interfaces non SDK. Si vous ne trouvez pas d'alternative à l'utilisation d'une interface non SDK pour une fonctionnalité de votre application, vous devez demander une nouvelle API publique.
Pour en savoir plus sur les modifications apportées à cette version d'Android, consultez Mises à jour des restrictions des interfaces non SDK dans Android 15. Pour en savoir plus sur les interfaces non SDK de manière générale, consultez la section Restrictions concernant les interfaces non SDK.
Appareil photo et contenu multimédia
Android 15 apporte les modifications suivantes au comportement de l'appareil photo et des contenus multimédias pour les applications qui ciblent Android 15 ou version ultérieure.
Restrictions concernant les demandes de priorité audio
Les applications qui ciblent Android 15 doivent être la première ou exécutant un service de premier plan audio pour demander la priorité audio. Si une application tente de demander une priorité alors qu'elle ne répond pas à l'une de ces exigences, l'appel renvoie AUDIOFOCUS_REQUEST_FAILED
.
Un service de premier plan est considéré comme audio si son type est mediaPlayback
, camera
, microphone
ou phoneCall
.
Pour en savoir plus sur la priorité audio, consultez Gérer la priorité audio.