La plate-forme Android 13 inclut des modifications de comportement susceptibles d'affecter votre application. La
Les modifications de comportement suivantes s'appliquent à toutes les applications lorsqu'elles s'exécutent sous Android 13 :
indépendamment de targetSdkVersion
. Vous devez tester votre application, puis la modifier en tant que
nécessaires pour les appliquer correctement, le cas échéant.
Veillez également à consulter la liste des modifications de comportement qui ne concernent 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 la panneau des notifications pour arrêter les applications disposant de services de premier plan en cours, comme illustré comme illustré dans la figure 1. Cette affordance est connue sous le nom de Gestionnaire de tâches. Les applications doivent pouvoir gérer cela déclenchée par l'utilisateur à l'arrêt.
Améliorer la gestion des jobs de préchargement à l'aide de JobScheduler
JobScheduler permet aux applications de marquer des tâches spécifiques comme "préchargement"
(avec JobInfo.Builder.setPrefetch()
), ce qui signifie qu'il doit idéalement être exécuté
peu avant et avant le prochain lancement
de l’application afin d’améliorer l’expérience utilisateur.
Auparavant, JobScheduler n'utilisait le signal que pour autoriser les jobs de préchargement
utiliser de manière opportuniste des données sans frais ou excédentaires.
Sur Android 13 (niveau d'API 33) ou version ultérieure, le système tente de de déterminer le prochain lancement d'une application et d'utiliser cette estimation pour s'exécuter des jobs de préchargement. Les applications doivent essayer d'utiliser les tâches de préchargement pour toutes les tâches souhaitées. à effectuer avant le prochain lancement de l'application.
Utilisation des ressources de la batterie
Android 13 (niveau d'API 33) offre au système les méthodes suivantes pour mieux gérer l'autonomie de la batterie de l'appareil:
- Les règles concernant les cas où le système place votre application dans la catégorie "Limitée" a été mise à jour Application Bucket de secours.
- Nouvelles limites sur le travail que votre application peut effectuer lorsque l'utilisateur la place dans "restreint" pour utilisation de la batterie en arrière-plan.
Lorsque vous testez votre application avec ces modifications, vérifiez les points suivants choses:
Testez la réaction de votre application lorsque le système la place dans la catégorie "Limité" Application Bucket de secours. Utilisez les 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éagit aux restrictions suivantes qui s'appliquent généralement aux applications auxquelles l'accès est "restreint" état 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 ce domaine état:
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 Firebase Cloud Messaging (FCM) pour améliorer la fiabilité de la diffusion FCM à priorité élevée pour les applications qui affichent des notifications en réponse à 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 à priorité élevée évoluent proportionnellement au 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 FCM à priorité élevée qui dépassent le quota reviennent à la priorité normale. Lorsque vous lancez des services de premier plan en réponse à un FCM, nous vous recommandons de vérifier le résultat de RemoteMessage.getPriority()
et 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 des 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 générant une notification ne passent pas à une version antérieure.
Confidentialité
Autorisation d'exécution pour les notifications
Android 13 (niveau d'API 33) introduit un environnement d'exécution
autorisation de notification:
POST_NOTIFICATIONS
Ce changement permet aux utilisateurs de se concentrer sur les notifications les plus importantes
de l'IA générative.
Nous vous recommandons vivement de cibler Android 13 ou version ultérieure dès que possible que possible pour bénéficier des effets du contrôle et de la flexibilité supplémentaires cette fonctionnalité.
En savoir plus sur 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 crédits
les informations de la carte dans le presse-papiers, vous devez ajouter un indicateur au
ClipDescription
avant d'appeler ClipboardManager#setPrimaryClip()
. Ajout...
cet indicateur empêche le contenu sensible d'apparaître dans l'aperçu du contenu.
![Aperçu du texte copié sans signaler le contenu sensible](https://developer.android.com/static/images/about/versions/13/sensitive-content-before.png?authuser=19&hl=fr)
![Aperçu du texte copié signalant le contenu sensible.](https://developer.android.com/static/images/about/versions/13/sensitive-content-after.png?authuser=19&hl=fr)
Pour signaler du contenu sensible, ajoutez un extra booléen à ClipDescription
. Tout
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 du presse-papiers, consultez le Copier et coller.
Sécurité
Abandon de l'User-ID partagé
Si votre application utilise la version obsolète
Attribut android:sharedUserId
et qu'elles ne dépendent plus de la fonctionnalité de l'attribut, vous pouvez définir
android:sharedUserMaxSdkVersion
à 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 appli ne repose plus sur un
ID utilisateur. Si votre appli déclare android:sharedUserMaxSdkVersion
et que vous venez de
installée sur des appareils équipés d'Android 13 ou version ultérieure, votre application
se comporte comme si vous n'aviez jamais défini android:sharedUserId
. Les applis 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 fournisseurs de contenu, pour faciliter l'interopérabilité entre les composants partagés.
Expérience utilisateur
Notifications de services de premier plan qui peuvent être ignorées
Sur les appareils équipés d'Android 13 ou version ultérieure, les utilisateurs peuvent ignorer notifications associées au premier plan services par défaut.
Fonctionnalité de base
Ancienne copie de la mise en œuvre du service de reconnaissance vocale supprimée
Android 13 supprime l'implémentation de SpeechService
, y compris
IME vocal, RecognitionService
et un modèle basé sur l'intent
API, à partir de
l'appli Google.
Sous Android 12, les modifications suivantes ont été apportées:
- Les fonctionnalités
SpeechService
ont été migrées vers Services vocaux par Google application, qui est devenu le fournisseurSpeechService
par défaut. - La fonctionnalité
RecognitionService
a été transférée vers le système Android Application d'intelligence compatible avec la reconnaissance vocale sur l'appareil.
Pour assurer la compatibilité des applications sous Android 12, l'appli Google utilise un trampoline pour rediriger le trafic vers l'application Services vocaux de Google. Dans Android 13, ce trampoline a été supprimé.
Les applis doivent utiliser le fournisseur par défaut de l'appareil pour SpeechService
, plutôt que
le codage en dur
d'une application spécifique.