L'optimisation du code DEX est un résultat d'Android Vitals qui vous aide à surveiller et à améliorer la qualité de compilation, la taille et les performances de votre application. L'optimisation et l'obscurcissement de votre code à l'aide de R8 ou d'autres outils (tels que des optimiseurs compatibles avec ProGuard ou des post-processeurs DEX secondaires) réduisent la taille DEX de votre application, améliorent les performances d'exécution et minimisent son espace mémoire utilisé.
Les fichiers DEX, ou Dalvik Executable, contiennent le code compilé utilisé pour exécuter votre application. Il s'agit généralement de code Java et Kotlin, par opposition au code C++ compilé ou aux fichiers .so.
Android Vitals fournit des métriques d'optimisation du code DEX pour toutes les applications et tous les jeux, mais n'applique des seuils que pour les applications et les jeux qui répondent à des exigences de taille spécifiques.
Détecter le problème
Android Vitals peut vous envoyer des alertes dans la Play Console lorsque les niveaux d'optimisation, de réduction ou d'obscurcissement du code DEX de votre application ne respectent pas les pourcentages minimaux définis.
Comment les scores d'optimisation sont-ils calculés ?
Pour les applications créées avec la dernière version de correctif d'AGP 8.10 ou version ultérieure (par exemple, 8.10.1 plutôt que 8.10.0), ces pourcentages sont extraits du fichier r8.json inclus. Assurez-vous d'utiliser la dernière version de correctif d'AGP et de R8 pour votre version mineure afin que des métadonnées précises soient générées.
Pour les applications créées avec des versions antérieures d'AGP ou optimisées avec un autre optimiseur de code n'incluant pas r8.json, Android Vitals estime les pourcentages d'obscurcissement en tant que proxy à l'aide du fichier mapping.txt (si inclus) ou des heuristiques DEX.
Taille minimale totale du DEX
Bien qu'Android Vitals calcule les métriques d'optimisation du code pour toutes les applications, vous ne recevrez des alertes que si votre app bundle respecte les exigences suivantes concernant la taille totale du DEX :
- Applications : le bundle contient au moins 10 Mo de code DEX (taille non compressée).
- Jeux : le bundle contient au moins 50 Mo de code DEX (taille non compressée).
Mesurer l'optimisation du code localement
Pour mesurer la taille DEX non compressée de votre app bundle et obtenir les pourcentages d'optimisation, de réduction et d'obscurcissement correspondant aux résultats d'Android Vitals, exécutez android analyze :
android analyze <yourapp>.aab
Résoudre le problème
Pour remédier aux faibles scores d'optimisation du code DEX, consultez les recommandations en fonction de votre système de compilation et de votre optimiseur :
R8
Pour améliorer vos scores d'optimisation du code DEX R8, consultez les conseils de la section Améliorer l'optimisation R8 et utilisez l'analyseur de configuration R8 pour comprendre l'impact de vos règles de conservation sur vos scores d'optimisation, de minification et d'obscurcissement (pour obtenir des définitions détaillées de ces métriques, consultez Comprendre le rapport).
Si vous utilisez le plug-in Android Gradle (AGP), vous pouvez également utiliser la compétence d'analyseur R8 pour obtenir des conseils supplémentaires sur l'optimisation des règles de conservation de votre application. Si vous utilisez Bazel, vous avez également accès à l'analyseur de configuration R8. Consultez la documentation sur l'optimisation de R8 pour rules_android.
Optimiseurs non-R8 et post-processeurs DEX
Si votre pipeline de compilation utilise des outils de compilation personnalisés ou des post-processeurs DEX secondaires, procédez comme suit pour améliorer l'optimisation de votre application :
- Ouvrez votre app bundle dans Android Studio et affichez-le dans l'analyseur d'APK.
- Sélectionnez tous les fichiers
.dex. - Portez une attention particulière aux fichiers les plus volumineux lorsque vous activez le bouton "Désobscurcir les noms" (remarque : vous devez charger un fichier
mapping.txt). Si vous constatez que certains de ces fichiers restent volumineux après l'obscurcissement, il est probable qu'ils soient affectés par des règles de conservation à l'échelle du package. - Recherchez dans votre fichier
proguard-rules.pro,configuration.txtou l'équivalent pour votre optimiseur si vous n'utilisez pas R8, puis recherchez les règles de conservation correspondant aux packages qui ne sont pas obscurcis. Par exemple, sicom.foo.est un package volumineux dans vos fichiers DEX, recherchez les règles de conservation au format-keep com.foo.**ou-keep com.foo.bar.**. - Notez que les règles de conservation des consommateurs de bibliothèques peuvent être plus difficiles à identifier. Si vous pensez qu'une règle de consommateur de bibliothèque a un impact sur l'optimisation, vous pouvez inspecter la bibliothèque directement à l'aide de
android analyze <library>.aarou la valider en l'ajoutant à un exemple d'application autonome utilisant une version récente d'AGP et en l'inspectant avec l'analyseur de configuration R8.