La plate-forme Android 13 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 13, 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 13.
Performances et batterie
Gestionnaire de tâches
À partir d'Android 13 (niveau d'API 33), les utilisateurs peuvent suivre un workflow depuis le volet des notifications pour arrêter les applications qui exécutent des services de premier plan, comme illustré dans la figure 1. Cette affordance est appelée Gestionnaire des tâches. Les applications doivent pouvoir gérer cet arrêt initié par l'utilisateur.
Améliorer la gestion des jobs de préchargement à l'aide de JobScheduler
JobScheduler permet aux applications de marquer des jobs spécifiques comme jobs de "préchargement" (à l'aide de JobInfo.Builder.setPrefetch()), ce qui signifie qu'ils doivent idéalement s'exécuter juste avant le prochain lancement de l'application pour améliorer l'expérience utilisateur.
Auparavant, JobScheduler n'utilisait le signal que pour permettre aux jobs de préchargement d'utiliser de manière opportuniste les données sans frais ou excédentaires.
Sous Android 13 (niveau d'API 33) ou version ultérieure, le système tente de déterminer la prochaine fois qu'une application sera lancée et utilise cette estimation pour exécuter des jobs de préchargement. Les applications doivent essayer d'utiliser des jobs de préchargement pour toutes les tâches qu'elles souhaitent effectuer avant le prochain lancement de l'application.
Utilisation des ressources de la batterie
Android 13 (niveau d'API 33) propose les méthodes suivantes pour permettre au système de mieux gérer l'autonomie de la batterie de l'appareil :
- Mise à jour des règles concernant le moment où le système place votre application dans le bucket de mise en veille des applications"limité".
- Nouvelles limites concernant les tâches que votre application peut effectuer lorsque l'utilisateur la place à l'état "Limité" pour l'utilisation de la batterie en arrière-plan.
Lorsque vous testez votre application avec ces modifications, veillez à vérifier les points suivants :
Testez la réponse de votre application lorsque le système la place dans le bucket de mise en veille des applications"limité". Utilisez la commande Android Debug Bridge (ADB) suivante pour attribuer votre application à ce bucket :
adb shell am set-standby-bucket PACKAGE_NAME restricted
Testez la façon dont votre application réagit aux restrictions suivantes, qui s'appliquent généralement aux applications à l'état "Limité" pour l'utilisation de la batterie en arrière-plan :
- Impossible de lancer les services de premier plan.
- Les services existants au premier plan sont supprimés du premier plan.
- Les alarmes ne se déclenchent pas.
- Les tâches ne sont pas exécutées.
Utilisez la commande ADB suivante pour placer votre application dans cet état "restreint" :
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Quotas de messages Firebase Cloud Messaging (FCM) à priorité élevée
Android 13 (niveau d'API 33) met à jour les quotas de Firebase Cloud Messaging (FCM) pour améliorer la fiabilité de la distribution des FCM à priorité élevée pour les applications qui affichent des notifications en réponse à des FCM à priorité élevée. Les modifications suivantes ont été apportées à Android 13 (niveau d'API 33) :
- Les buckets de mise en veille des applications ne déterminent plus le nombre de messages FCM de priorité élevée qu'une application peut utiliser.
- Le système rétrograde désormais les messages à priorité élevée s'il détecte qu'une application envoie systématiquement des messages à priorité élevée qui n'entraînent pas de notification.
Comme dans les versions précédentes d'Android, les messages FCM à priorité élevée qui dépassent le quota sont rétrogradés en priorité normale. Lorsque vous démarrez des services de premier plan en réponse à un message FCM, nous vous recommandons de vérifier le résultat de RemoteMessage.getPriority() et de confirmer qu'il s'agit de PRIORITY_HIGH et/ou de gérer les éventuelles exceptions ForegroundServiceStartNotAllowedException.
Si votre application ne publie pas toujours de notifications en réponse aux FCM à priorité élevée, nous vous recommandons de définir la priorité de ces FCM sur normale afin que les messages qui génèrent une notification ne soient pas rétrogradés.
Confidentialité
Autorisation d'exécution pour les notifications
Android 13 (niveau d'API 33) introduit une autorisation de notification d'exécution : POST_NOTIFICATIONS.
Ce changement permet aux utilisateurs de se concentrer sur les notifications qui leur importent le plus.
Nous vous recommandons vivement de cibler Android 13 ou version ultérieure dès que possible pour bénéficier du contrôle et de la flexibilité supplémentaires de cette fonctionnalité.
En savoir plus sur les bonnes pratiques concernant les autorisations des applications
Masquer le contenu sensible du presse-papiers
Si votre application permet aux utilisateurs de copier du contenu sensible, comme des mots de passe ou des informations de carte de crédit, dans le presse-papiers, vous devez ajouter un flag à l'élément ClipDescription de ClipData avant d'appeler ClipboardManager#setPrimaryClip(). L'ajout de cet indicateur empêche l'affichage de contenu sensible dans l'aperçu du contenu.
Pour signaler un contenu sensible, ajoutez un extra booléen à l'ClipDescription. Toutes les applications doivent le faire, quel que soit le niveau d'API ciblé.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
Pour en savoir plus sur la nouvelle UI du presse-papiers, consultez la page de la fonctionnalité Copier et coller.
Sécurité
Migrer depuis l'ID utilisateur partagé
Si votre application utilise l'attribut obsolète android:sharedUserId et ne dépend plus de sa fonctionnalité, vous pouvez définir l'attribut android:sharedUserMaxSdkVersion sur 32, comme indiqué dans l'extrait de code suivant :
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
Cet attribut indique au système que votre application ne repose plus sur un ID utilisateur partagé. Si votre application déclare android:sharedUserMaxSdkVersion et qu'elle est installée sur des appareils exécutant Android 13 ou une version ultérieure, elle se comporte comme si vous n'aviez jamais défini android:sharedUserId. Les applications mises à jour continuent d'utiliser l'ID utilisateur partagé existant.
Le partage d'ID utilisateur entraîne un comportement non déterministe dans le gestionnaire de paquets. Votre application doit plutôt utiliser des mécanismes de communication appropriés, tels que des services et des fournisseurs de contenu, pour favoriser l'interopérabilité entre les composants partagés.
Expérience utilisateur
Notifications de service de premier plan pouvant être ignorées
Sur les appareils équipés d'Android 13 ou version ultérieure, les utilisateurs peuvent ignorer les notifications associées aux services de premier plan par défaut.
Fonctionnalité de base
Ancienne copie de l'implémentation du service de reconnaissance vocale supprimée
Android 13 supprime l'implémentation de SpeechService (y compris l'IME vocal, RecognitionService et une API basée sur l'intent) de l'appli Google.
Dans Android 12, les modifications suivantes ont été apportées :
- Les fonctionnalités de
SpeechServiceont été migrées vers l'application Services vocaux de Google, qui est devenue le fournisseurSpeechServicepar défaut. - La fonctionnalité
RecognitionServicea été déplacée vers l'application Android System Intelligence pour prendre en charge la reconnaissance vocale sur l'appareil.
Pour maintenir la compatibilité des applications sur Android 12, l'appli Google utilise un trampoline pour rediriger le trafic vers l'application Services vocaux de Google. Dans Android 13, ce trampoline est supprimé.
Les applications doivent utiliser le fournisseur par défaut de l'appareil pour SpeechService, plutôt que de coder en dur une application spécifique.