Optimisation du code DEX

L'optimisation du code DEX est un résultat 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'outils alternatifs (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 empreinte mémoire.

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.

Les rapports Android Vitals indiquent des métriques d'optimisation du code DEX pour toutes les applications et tous les jeux, mais n'appliquent 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 alerter lorsque les niveaux d'optimisation du code DEX de votre application sont faibles. Cela inclut l'obscurcissement, la minification et l'optimisation des applications et des jeux qui utilisent R8. Pour les applications qui n'utilisent pas R8, Android Vitals tente de vérifier les taux d'optimisation, de réduction et d'obscurcissement, mais utilise des heuristiques d'obscurcissement comme substitut si nécessaire.

Surveiller l'état de l'optimisation

Android Vitals peut vous aider à améliorer les performances de votre application en vous alertant via la Play Console lorsque votre application ne respecte pas les pourcentages définis pour l'optimisation du code. Pour obtenir des définitions détaillées de la minification, de l'optimisation et de l'obscurcissement, consultez Utiliser l'analyseur de configuration R8.

Pour les applications créées avec le dernier correctif de l'AGP version 8.10 ou ultérieure, ces pourcentages sont extraits du fichier r8.json inclus.

Pour les versions antérieures d'AGP ou lorsque le fichier r8.json n'est pas inclus, les pourcentages sont calculés à partir du fichier mapping.txt, s'il est inclus, ou à l'aide d'heuristiques DEX si le fichier de mappage n'est pas disponible.

Pour les applications optimisées avec un autre outil d'optimisation du code, Android Vitals effectue une analyse pour estimer le pourcentage de classes, de méthodes et de champs obscurcis dans le bundle d'application.

Tailles minimales totales du DEX

Bien qu'Android Vitals calcule les métriques d'optimisation du code pour toutes les applications, vous ne recevrez d'alertes que si votre app bundle répond aux exigences suivantes concernant la taille totale du fichier 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).

Android Vitals affiche la taille DEX de votre application, mais vous pouvez également la mesurer en local à l'aide de la ligne de commande :

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

Mesurer l'optimisation du code R8 en local

Si votre application est optimisée avec R8, vous pouvez mesurer l'optimisation, l'obscurcissement et la réduction de votre app bundle à l'aide de l'analyseur de configuration R8. Le rapport de l'analyseur de configuration R8 est également inclus dans la compétence d'analyse R8. Bien que le rapport puisse vous aider à comprendre l'impact de vos règles de conservation sur vos scores d'optimisation, de réduction et d'obscurcissement, les pourcentages indiqués ne correspondront pas aux valeurs d'Android Vitals, car ils sont calculés avant les optimisations.

Pour inspecter les métadonnées exactes qu'Android Vitals utilise pour calculer vos scores, extrayez le fichier r8.json de votre app bundle :

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

Résoudre le problème

Pour résoudre les problèmes de faible score d'optimisation du code DEX, consultez les recommandations en fonction de votre système de compilation et de votre optimiseur :

Plug-in Android Gradle et R8

Pour améliorer vos scores d'optimisation du code DEX R8, consultez les conseils de la page Améliorer l'optimisation R8. Vous pouvez également utiliser la compétence d'analyse R8 pour obtenir des conseils supplémentaires sur l'optimisation des règles de conservation de votre application.

Systèmes de compilation et post-processeurs DEX non-R8

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ésobfusquer les noms" (remarque : vous devez importer un fichier mapping.txt). Si vous constatez que certains de ces fichiers restent volumineux après l'obscurcissement, il est probable qu'ils soient concernés par des règles de conservation à l'échelle du package.
  • Consultez votre fichier proguard-rules.pro, configuration.txt ou l'équivalent pour votre optimiseur si vous n'utilisez pas R8, et recherchez les règles de conservation qui correspondent aux packages qui ne sont pas obscurcis. Par exemple, si com.foo. est un package volumineux dans votre fichier dex, recherchez les règles de conservation au format -keep com.foo.** ou -keep com.foo.bar.**.
  • N'oubliez pas que les règles de conservation des consommateurs de bibliothèque peuvent ne pas être aussi faciles à identifier. Si vous pensez qu'une règle de consommateur de bibliothèque a un impact sur l'optimisation, vous pouvez la valider localement en l'ajoutant à une application exemple autonome à l'aide d'une version récente d'AGP, puis en l'inspectant avec l'analyseur de configuration R8.