Bienvenue au quatrième jour de notre « Semaine Spéciale Performance » ! Après avoir découvert des outils puissants comme l’optimiseur R8 et l’optimisation guidée par profil avec les Profils de Base et les Profils de Démarrage, il est temps de tracer votre propre feuille de route.
Nous vous proposons un « guide de niveaux » progressif, conçu pour accompagner chaque équipe de développement mobile. Que vous soyez un développeur solo en quête de premiers gains de performance ou une équipe dédiée à pousser les limites d’Android, ce parcours en cinq paliers est fait pour vous. Préparez-vous à monter en compétences, du niveau 1 axé sur des outils à faible effort d’adoption jusqu’au niveau 5, parfait pour les applications nécessitant un framework de performance sur mesure.
Niveau 1 : Le Radar de Performance Intégré de la Google Play Console
Pour débuter votre quête de performance avec un minimum d’effort, nous recommandons de plonger dans les « Android Vitals » via la Play Console. C’est votre tableau de bord stratégique pour des données de monitoring en temps réel, collectées automatiquement sur le terrain.
Les Android Vitals, c’est l’initiative de Google pour collecter et visualiser ces précieuses données. Voici comment ce système fonctionne :
-
Collecte de Données : Quand un utilisateur donne son consentement, son appareil Android enregistre automatiquement les événements clés de performance et de stabilité de toutes les applications, y compris la vôtre.
-
Agrégation des Données : Google Play centralise et anonymise ces informations, provenant des utilisateurs de votre application.
-
Visualisation des Insights : Ces données sont ensuite présentées de manière intelligible dans le tableau de bord Android Vitals de votre Google Play Console.
Le tableau de bord suit de nombreuses métriques, mais certaines sont désignées comme les Vitals Essentiels. Elles sont cruciales car elles peuvent impacter la visibilité et le classement de votre application sur le Google Play Store.
Les Vitals Essentiels : Votre Score de Qualité Technique
Les Vitals Essentiels comprennent le taux de crash perçu par l’utilisateur, le taux d’ANR (Application Not Responding), l’utilisation excessive de la batterie et la nouvelle métrique sur les « wake locks » partiels excessifs.
Pour maximiser votre visibilité sur Google Play, il est impératif de maintenir votre application en dessous des seuils de « mauvais comportement » pour ces métriques. Voici un aperçu :
| MÉTRIQUES DE QUALITÉ TECHNIQUE ESSENTIELLES DE GOOGLE PLAY
Pour maximiser la visibilité sur Google Play, maintenez votre application en dessous des seuils de mauvais comportement pour ces métriques. |
|
|---|---|
| Taux de crash perçu par l’utilisateur | Le pourcentage d’utilisateurs actifs quotidiens ayant subi au moins un crash probablement perceptible. |
| Taux d’ANR perçu par l’utilisateur | Le pourcentage d’utilisateurs actifs quotidiens ayant subi au moins un ANR probablement perceptible. |
| Utilisation excessive de la batterie | Le pourcentage de sessions de cadran de montre où l’utilisation de la batterie dépasse 4,44% par heure. |
| Nouveau : Wake locks partiels excessifs | Le pourcentage de sessions utilisateur où l’utilisation cumulative et non exempte de wake lock dépasse 2 heures. |
Taux d’ANR perçu par l’utilisateur
Utilisez le tableau de bord ANR d’Android Vitals pour examiner les « stack traces » des problèmes rencontrés sur le terrain. Vous y trouverez des informations et des recommandations pour résoudre les ANR.
Pensez à consulter nos directives ANR pour diagnostiquer et corriger les scénarios courants menant à ces blocages.
Taux de Crash perçu par l’utilisateur
Le tableau de bord des crashes d’Android Vitals vous aidera à déboguer en profondeur les incidents, en affichant des exemples de « stack traces » de votre application.
Notre documentation offre également des conseils pour le dépannage de crashes spécifiques. Par exemple, le guide de dépannage des services de premier plan détaille comment identifier et corriger les scénarios de crashes fréquents.
Utilisation excessive de la batterie
Pour réduire les sessions de cadran de montre avec une consommation excessive sur Wear OS, explorez le guide Wear sur l’amélioration et la conservation de la batterie. Un must pour tout développeur de montres connectées !
[Nouveau] Wake locks partiels excessifs
Nous avons récemment annoncé que les applications qui dépassent le seuil des « wake locks » partiels excessifs pourraient subir des pénalités à partir du 1er mars 2026. Sur les appareils mobiles, cette métrique s’applique aux « wake locks » non exemptés acquis lorsque l’écran est éteint et que l’application est en arrière-plan ou exécute un service de premier plan. Android Vitals considère l’utilisation de « wake locks » partielle comme excessive si ces verrous sont maintenus pendant au moins deux heures sur une période de 24 heures et affectent plus de 5 % des sessions de votre application, en moyenne sur 28 jours.
Pour déboguer et résoudre ces problèmes, consultez notre billet de blog technique dédié. Poursuivez votre apprentissage avec la documentation Android Vitals pour maîtriser pleinement ces outils !
Niveau 2 : La Quête du Score de Performance Ultime
Après avoir assimilé les bases des Vitals, progressez en utilisant l’App Performance Score pour identifier les actions à fort impact qui propulseront les performances de votre application. Ce cadre standardisé attribue à votre application un score entre 0 et 100, un chiffre bas indiquant une marge d’amélioration significative.
Pour des victoires rapides, commencez par le Score de Performance Statique. Il s’agit souvent de modifications de configuration ou de mises à jour d’outils qui offrent des boosts de performance non négligeables.
Étape 1 : L’Évaluation Statique – Les Premiers Gains Faciles
L’évaluation statique examine la configuration de votre projet et l’adoption de vos outils. Ces ajustements sont généralement les plus rapides pour améliorer les performances. Rendez-vous à la section Score Statique de la page du tableau de bord et effectuez les actions suivantes :
-
Évaluez la version de votre Android Gradle Plugin (AGP).
-
Adoptez la minification R8 de manière incrémentale ou, idéalement, utilisez R8 en mode complet pour minifier et optimiser le code de votre application.
-
Implémentez les Profils de Base qui accélèrent l’exécution du code dès le premier lancement, offrant des améliorations pour chaque nouvelle installation et mise à jour.
-
Adoptez les Profils de Démarrage pour optimiser le Dex Layout. Ils sont utilisés par le système de build pour améliorer l’agencement du code dans les fichiers DEX de votre APK.
-
Passez à la version la plus récente de Jetpack Compose.
Étape 2 : L’Évaluation Dynamique – Validez vos Optimisations sur le Terrain
Une fois les « easy wins » statiques appliqués, utilisez l’évaluation dynamique pour valider les améliorations sur un appareil réel. Vous pouvez commencer manuellement avec un appareil physique et un chronomètre. Dirigez-vous vers la section Score Dynamique du tableau de bord et procédez comme suit :
-
Configurez votre environnement de test avec un appareil physique. Envisagez d’utiliser un appareil moins performant pour accentuer les problèmes de performance et les repérer plus facilement.
-
Mesurez le temps de démarrage depuis le lanceur. Lancez votre application à froid depuis l’icône du lanceur et mesurez le temps jusqu’à ce qu’elle soit interactive.
-
Mesurez le temps de démarrage de l’application depuis une notification, avec l’objectif de le réduire à quelques secondes.
-
Mesurez les performances de rendu en faisant défiler vos écrans principaux et vos animations.
Une fois ces étapes franchies, vous obtiendrez un score entre 1 et 100 pour les évaluations statiques et dynamiques, vous donnant une compréhension claire des performances de votre application et des domaines à privilégier.
Niveau 3 : L’Armée de Bots au Service de la Performance – Frameworks de Test Locaux
Après avoir commencé à évaluer la performance dynamique, mesurer manuellement peut devenir fastidieux. Il est temps d’automatiser vos tests de performance à l’aide de frameworks comme Macrobenchmark et UiAutomator.
Macrobenchmark 💚 UiAutomator : Le Duo de Choc
Considérez Macrobenchmark et UiAutomator comme deux outils travaillant en tandem. Macrobenchmark est l’outil de mesure : une sorte de chronomètre et de compteur de « frame-rate » qui opère en dehors de votre application. Il est responsable du démarrage de l’application, de l’enregistrement des métriques (temps de démarrage, frames perdues) et de l’arrêt de l’application. UiAutomator, lui, est le « robot utilisateur ». Cette bibliothèque vous permet d’écrire du code pour interagir avec l’écran de l’appareil : trouver une icône, taper sur un bouton, faire défiler une liste, et bien plus encore.
Comment écrire un test : Votre Script d’Optimisation
Lorsque vous écrivez un test, vous encapsulez votre code UiAutomator à l’intérieur d’un bloc Macrobenchmark.
-
Définir le Test : Utilisez la balise
@MacrobenchmarkRule. -
Démarrer la Mesure : Appelez
benchmarkRule.measureRepeated. -
Piloter l’Interface : À l’intérieur de ce bloc, utilisez le code UiAutomator pour lancer votre application, trouver des éléments d’interface utilisateur et interagir avec eux.
Voici un extrait de code illustrant un test de « jank » (saccade) lors du défilement d’une liste Compose :
benchmarkRule.measureRepeated(
// ...
metrics = listOf(
FrameTimingMetric(),
),
startupMode = StartupMode.COLD,
iterations = 10,
) {
// 1. Launch the app's main activity
startApp()
// 2. Find the list using its resource ID and scroll down
onElement { viewIdResourceName == "$packageName.my_list" }
.fling(Direction.DOWN)
}
-
Examiner les Résultats : Chaque exécution de test vous fournit des informations mesurées avec précision pour des données optimales sur les performances de votre application.
Voici un exemple de ce que vous pourriez voir :
timeToInitialDisplayMs min 1894.4, median 2847.4, max 3355.6
frameOverrunMs P50 -3.2, P90 6.2, P95 10.4, P99 119.5
Cas d’Utilisation Fréquents : Les Métriques Clés
Macrobenchmark fournit plusieurs métriques essentielles « out of the box ». StartupTimingMetric vous permet de mesurer avec précision le démarrage de l’application. La FrameTimingMetric vous aide à comprendre les performances de rendu d’une application pendant le test.
Prêt à passer à l’action ? Nous avons un guide détaillé et complet sur l’utilisation de Macrobenchmarks et UiAutomator, accompagné d’exemples de code pour vous permettre de poursuivre votre apprentissage.
Niveau 4 : Plongée dans les Profondeurs du Système avec Perfetto
Les outils d’analyse de traces comme Perfetto sont indispensables lorsque votre enquête va au-delà du simple code de votre application. Contrairement aux débogueurs ou profileurs standards qui ne voient que votre processus, Perfetto capture l’état complet de l’appareil – ordonnancement du noyau, fréquence CPU, autres processus, et services système – vous offrant un contexte total pour les problèmes de performance.
Pour des instructions vidéo sur le débogage de performance avec les traces système, Android Studio Profiler et Perfetto, consultez notre playlist YouTube « Performance Debugging ».
Comment utiliser Perfetto pour déboguer la performance : La Triade Sacrée
Le flux de travail général pour le débogage des performances à l’aide d’outils d’analyse de traces consiste à enregistrer, charger et analyser la trace.
Étape 1 : Enregistrer une Trace
Vous pouvez enregistrer une trace système via plusieurs méthodes :
-
Enregistrer une trace manuellement sur l’appareil directement depuis les options de développement.
-
Utiliser l’Android Studio CPU Profiler.
-
Utiliser l’interface utilisateur de Perfetto.
Étape 2 : Charger la Trace
Une fois que vous avez le fichier de trace, il faut le charger dans l’outil d’analyse.
-
Ouvrez Chrome et naviguez vers ui.perfetto.dev.
-
Glissez-déposez votre fichier
.perfetto-trace(ou.pftrace) directement dans la fenêtre du navigateur. -
L’interface traitera le fichier et affichera la chronologie.
Étape 3 : Analyser la Trace
Vous pouvez utiliser l’interface utilisateur de Perfetto ou l’Android Studio Profiler pour investiguer les problèmes de performance. Notre ingénieur performance Carmen Jackson aborde le traceviewer de Perfetto dans un épisode de la série MAD Skills sur la Performance.
Scénarios pour l’inspection des traces système avec Perfetto
Perfetto est un outil d’expert capable de fournir des informations sur tout ce qui s’est passé sur l’appareil Android pendant la capture d’une trace. C’est particulièrement utile lorsque vous ne pouvez pas identifier la cause première d’un ralentissement à l’aide des logs standards ou des profileurs basiques.
Déboguer le « Jank » (Frames Perdues)
Si votre application saccade lors du défilement, Perfetto peut vous montrer précisément pourquoi une « frame » spécifique a manqué son délai. Si cela est dû à l’application, vous pourriez voir votre thread principal s’exécuter longtemps en effectuant un traitement lourd, ce qui indique des scénarios où vous devriez déplacer ce travail vers un traitement asynchrone. Si cela est dû au système, vous pourriez voir votre thread principal prêt à s’exécuter, mais l’ordonnanceur du noyau CPU a donné la priorité à un autre service système, laissant votre application en attente (contention CPU). Cela indique des scénarios où vous devrez optimiser l’utilisation des API de la plateforme.
Analyse d’un Démarrage d’Application Lent
Le démarrage est un processus complexe, impliquant l’initialisation du système, la création de processus et le chargement des ressources. Perfetto visualise précisément cette chronologie. Vous pouvez voir si vous attendez des appels Binder (communication inter-processus). Si votre méthode onCreate attend longtemps une réponse du PackageManager système, Perfetto affichera clairement cet état bloqué. Vous pouvez également voir si votre application effectue plus de travail que nécessaire pendant le démarrage, par exemple si elle crée et agence plus de vues que l’application n’a besoin d’afficher.
Investigation de la Consommation de Batterie et de l’Utilisation CPU
Parce que Perfetto voit l’ensemble du système, il est parfait pour trouver les drains de puissance invisibles. Vous pouvez identifier quels processus détiennent des wake locks, empêchant l’appareil de se mettre en veille sous les pistes « Device State ». Pour en savoir plus, consultez notre billet de blog sur les wake locks. Utilisez également Perfetto pour voir si vos tâches en arrière-plan s’exécutent trop fréquemment ou réveillent le CPU inutilement.
Niveau 5 : Le Boss Final – Créez Votre Propre Observatoire de Performance
Ce niveau ultime est réservé aux applications dotées d’équipes ayant les ressources nécessaires pour maintenir un framework de suivi de performance sur mesure. La construction d’un tel système sur Android implique l’exploitation de plusieurs API système pour capturer des données tout au long du cycle de vie de l’application, du démarrage à la fermeture, et lors de scénarios à forte charge.
En utilisant ApplicationStartInfo, ProfilingManager et ApplicationExitInfo, vous pouvez créer un système de télémétrie robuste qui rend compte de la façon dont votre application a démarré, fournit des informations détaillées sur son comportement en cours d’exécution et explique pourquoi elle s’est arrêtée.
ApplicationStartInfo : Le Journal de Bord du Démarrage
Disponible à partir d’Android 15 (API 35), ApplicationStartInfo fournit des métriques détaillées sur le démarrage de l’application sur le terrain. Les données incluent le type de démarrage (froid, chaud ou tiède) et la durée des différentes phases. Cela vous aide à établir une métrique de démarrage de référence en utilisant des données de production, souvent difficiles à reproduire localement. Ces métriques peuvent être utilisées pour des tests A/B afin d’optimiser le flux de démarrage.
L’objectif est d’enregistrer précisément les métriques de lancement sans instrumenter manuellement chaque phase d’initialisation. Vous pouvez interroger ces données de manière différée, quelque temps après le lancement de l’application.
ProfilingManager : Le Détective des Ralentissements
ProfilingManager (API 35) permet à votre application de déclencher des traces système par programme sur les appareils des utilisateurs. Cette fonctionnalité est extrêmement puissante pour identifier les problèmes de performance transitoires « dans la nature » que vous ne parvenez pas à reproduire localement.
L’objectif est d’enregistrer automatiquement une trace lorsqu’un parcours utilisateur critique est détecté comme lent ou rencontrant des problèmes de performance. Vous pouvez enregistrer un écouteur qui se déclenche lorsque des conditions spécifiques sont remplies, ou le déclencher manuellement lorsque vous détectez un problème de performance comme le « jank », une mémoire excessive ou une consommation de batterie anormale.
Consultez notre documentation sur comment capturer un profil, récupérer et analyser les données de profilage, et utiliser les commandes de débogage.
ApplicationExitInfo : L’Autopsie des Plantages
ApplicationExitInfo (API 30) vous indique pourquoi votre processus précédent s’est arrêté. C’est crucial pour trouver les crashes natifs, les ANR ou les arrêts système dus à une utilisation excessive de la mémoire (OOM). Vous pourrez également obtenir une trace « tombstone » détaillée en utilisant l’API getTraceInputStream.
L’objectif de cette API est de comprendre les problèmes de stabilité qui ne déclenchent pas les rapports de crash Java standards (comme les « Low Memory Kills »). Vous devriez déclencher cette API lors du prochain lancement de l’application.
Prochaines Étapes : Votre Ascension Continue !
L’amélioration des performances Android est un voyage progressif. Nous sommes impatients de voir comment vous allez faire monter en niveau les performances de vos applications grâce à ces outils !
Rendez-vous demain pour « Ask Android » !
Vous avez réduit la taille de votre application avec R8 et optimisé son exécution avec l’optimisation guidée par profil. Vous avez mesuré la performance de votre application. Rejoignez-nous demain pour la session live « Ask Android ». Posez vos questions dès maintenant avec le hashtag #AskAndroid et obtenez des réponses de nos experts.
Mots-clés : performance Android, optimisation mobile, Android Vitals, App Performance Score, Macrobenchmark, UiAutomator, Perfetto, ProfilingManager, ApplicationStartInfo, ApplicationExitInfo, développement Android
Source : Article original
