Changements de comportement : toutes les applications

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, quelle que soit la targetSdkVersion. Vous devez tester votre application, puis la modifier si nécessaire pour 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

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

À partir d'Android 13 (niveau d'API 33), les utilisateurs peuvent suivre un workflow depuis le panneau des notifications pour arrêter les applications qui ont des services de premier plan actifs, comme illustré dans la figure 1. Cette affordance est appelée gestionnaire de tâches. Les applications doivent pouvoir gérer cet arrêt déclenché 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 être exécutées à proximité et avant le prochain lancement de l'application afin d'améliorer l'expérience utilisateur. Historiquement, JobScheduler n'utilisait le signal que pour permettre aux tâches de préchargement d'utiliser des données sans frais ou en excès de façon opportune.

Sous Android 13 (niveau d'API 33) ou version ultérieure, le système tente de déterminer le prochain lancement d'une application et utilise cette estimation pour exécuter des tâches de préchargement. Les applications doivent essayer d'utiliser des tâches de préchargement pour toutes les tâches qu'elles souhaitent effectuer avant le prochain lancement de l'application.

Utilisation des ressources de batterie

Android 13 (niveau d'API 33) permet au système de mieux gérer l'autonomie de la batterie de l'appareil comme suit:

Lorsque vous testez votre application avec ces modifications, veillez à vérifier les points suivants:

  • Testez la manière dont votre application répond lorsque le système la place dans le bucket de mise en veille des applications"limité". Exécutez la commande Android Debug Bridge (ADB) suivante pour attribuer votre application à ce bucket:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • Testez la manière dont votre application répond aux restrictions suivantes, qui s'appliquent généralement aux applications limitées 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.

    Exécutez 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 Firebase Cloud Message (FCM) à priorité élevée

Android 13 (niveau d'API 33) met à jour les quotas de Firebase Cloud Messaging (FCM) afin d'améliorer la fiabilité de la distribution 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 dans 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.
  • Les quotas FCM de priorité élevée sont ajustés en fonction du nombre de notifications présentées à l'utilisateur en réponse aux FCM à priorité élevée.

Comme dans les versions précédentes d'Android, les appareils FCM à priorité élevée qui dépassent le quota sont rétrogradés à la 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 l'erreur RemoteMessage.getPriority(), de vous assurer qu'il s'agit bien de PRIORITY_HIGH et/ou de gérer les éventuelles exceptions ForegroundServiceStartNotAllowedException.

Si votre application ne publie pas toujours de notifications en réponse à des FCM à priorité élevée, nous vous recommandons de définir la priorité de ces FCM sur normal afin que les messages donnant lieu à 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 aide les utilisateurs à se concentrer sur les notifications les plus importantes pour eux.

Nous vous recommandons vivement de cibler Android 13 ou une 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 pour les autorisations d'applications

Masquer le contenu sensible du presse-papiers

Si votre application permet aux utilisateurs de copier du contenu sensible dans le presse-papiers, comme des mots de passe ou des informations de carte de crédit, vous devez ajouter un indicateur au 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 signaler de contenu sensible
Aperçu du texte copié sans signaler de contenu sensible
Aperçu du texte copié signalant du contenu sensible.
L'aperçu du texte copié signale du contenu sensible.

Pour signaler du contenu sensible, ajoutez une valeur booléenne supplémentaire à ClipDescription. Toutes les applications doivent effectuer cette opération, 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 sur la fonctionnalité Copier et coller.

Sécurité

Abandonner l'ID utilisateur partagé

Si votre application utilise l'attribut obsolète android:sharedUserId et ne dépend plus de ses fonctionnalités, 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 équipés d'Android 13 ou 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 packages. Votre application doit plutôt utiliser les mécanismes de communication appropriés, tels que des services et des fournisseurs de contenu, pour faciliter 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 implémentation du service de reconnaissance vocale supprimée

Android 13 supprime l'implémentation de SpeechService, y compris l'IME Voice, RecognitionService et une API basée sur un intent, de l'application Google.

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

  • Les fonctionnalités de SpeechService ont été migrées vers l'application Services vocaux de Google, qui est devenue le fournisseur SpeechService par défaut.
  • La fonctionnalité RecognitionService a été déplacée vers l'application Android System Intelligence pour prendre en charge la reconnaissance vocale sur l'appareil.

Pour assurer la compatibilité des applications sous 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.