Changements de comportement : toutes les applications

La plate-forme Android 13 inclut des modifications de comportement qui peuvent affecter votre application. Les modifications de comportement suivantes s'appliquent à toutes les applications lorsqu'elles s'exécutent sur Android 13, quel que soit targetSdkVersion. Vous devez tester votre application, puis la modifier si nécessaire pour qu'elle soit compatible avec ces modifications, le cas échéant.

Assurez-vous également de consulter la liste des modifications de comportement qui n'affectent que les applications ciblant Android 13.

Performances et batterie

Gestionnaire de tâches

En bas du panneau de notifications se trouve un bouton qui indique le nombre d'applications actuellement en cours d'exécution en arrière-plan. Lorsque vous appuyez sur ce bouton, une boîte de dialogue s'affiche et liste les noms de différentes applications. Le bouton "Arrêter" se trouve à droite de chaque application.
Image 1. Workflow du gestionnaire de tâches , qui permet aux utilisateurs d'arrêter les applications qui ont des services de premier plan en cours d'exécution. Ce workflow n'apparaît que sur les appareils exécutant Android 13 ou version ultérieure.

À partir d'Android 13 (niveau d'API 33), les utilisateurs peuvent effectuer un workflow à partir du volet de notifications pour arrêter les applications qui ont des services de premier plan en cours d'exécution, comme illustré dans l'image 1. Cette fonctionnalité est appelée gestionnaire de tâches. Les applications doivent être en mesure de gérer cet arrêt initié par l'utilisateur.

Améliorer la gestion des tâches de préchargement à l'aide de JobScheduler

JobScheduler permet aux applications de marquer des tâches spécifiques comme des tâches de "préchargement" (à l'aide de JobInfo.Builder.setPrefetch()), ce qui signifie qu'elles 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 que le signal pour permettre aux tâches 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 les tâches de préchargement. Les applications doivent essayer d'utiliser des tâches de préchargement pour tout travail qu'elles souhaitent effectuer avant le prochain lancement de l'application.

Utilisation des ressources de la batterie

Android 13 (niveau d'API 33) offre les moyens suivants au système pour mieux gérer l'autonomie de la batterie de l'appareil :

  • Règles mises à jour concernant le moment où le système place votre application dans le "limité" App Standby Bucket.
  • Nouvelles limites concernant le travail que votre application peut effectuer lorsque l'utilisateur place votre application dans l'état "limité" pour l'utilisation de la batterie en arrière-plan.

Lorsque vous testez votre application avec ces modifications, assurez-vous de vérifier les points suivants :

  • Testez la façon dont votre application réagit lorsque le système la place dans le "limité" bucket de mise en veille des applications. 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 qui sont dans un "é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 "limité" :

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

Quotas de messages Firebase Cloud Message (FCM) à priorité élevée

Android 13 (niveau d'API 33) met à jour les quotas Firebase Cloud Messaging (FCM) pour améliorer la fiabilité de la diffusion 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 FCM à 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 FCM à priorité élevée qui dépassent le quota sont rétrogradés à une priorité normale. Lorsque vous démarrez des services de premier plan en réponse à un 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 exceptions ForegroundServiceStartNotAllowedException potentielles.

Si votre application ne publie pas toujours de notifications en réponse à des FCM à priorité élevée, nous vous recommandons de modifier la priorité de ces FCM en normale afin que les messages qui entraînent 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 d'exécution pour les notifications : POST_NOTIFICATIONS. Cette modification permet aux utilisateurs de se concentrer sur les notifications les plus importantes pour eux.

Nous vous recommandons vivement de cibler Android 13 ou version ultérieure dès que possible pour bénéficier des effets du contrôle et de la flexibilité supplémentaires de cette fonctionnalité.

En savoir plus sur les bonnes pratiques concernant les autorisations d'application.

Masquer le contenu sensible du presse-papiers

Si votre application permet aux utilisateurs de copier du contenu sensible, tel que des mots de passe ou des informations de carte de crédit, dans le presse-papiers, vous devez ajouter un indicateur à ClipDescription de ClipData avant d'appeler ClipboardManager#setPrimaryClip(). L'ajout de cet indicateur empêche le contenu sensible d'apparaître dans l'aperçu du contenu.

Aperçu du texte copié sans signalement de contenu sensible
Aperçu du texte copié sans indicateur de contenu sensible.
Aperçu du texte copié signalant un contenu sensible.
Aperçu du texte copié avec indicateur de contenu sensible.

Pour signaler un contenu sensible, ajoutez un extra booléen à 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 interface utilisateur du presse-papiers, consultez la page Fonctionnalité de copier-coller.

Sécurité

Migrer depuis un ID utilisateur partagé

Si votre application utilise l'attribut obsolète android:sharedUserIdet ne dépend plus de la fonctionnalité de l'attribut, vous pouvez définir l'attribut android:sharedUserMaxSdkVersion sur 32, comme illustré 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 dépend plus d'un ID utilisateur partagé. Si votre application déclare android:sharedUserMaxSdkVersion et qu'elle est nouvellement installée sur des appareils exécutant Android 13 ou version ultérieure, elle se comporte comme si vous n'aviez jamais défini android:sharedUserId. Les applications mises à jour utilisent toujours 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 exécutant 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

Suppression de l'ancienne copie de l'implémentation du service vocal

Android 13 supprime l'implémentation SpeechService (y compris l'IME vocal, RecognitionService et une API basée sur les intents ) de l'application Google.

Dans Android 12, les modifications suivantes ont été apportées :

Pour assurer la compatibilité des applications sur Android 12, l'application 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.