Optimisation du code DEX

L'optimisation du code DEX est un résultat Android Vitals qui vous aide à surveiller et à améliorer la qualité, la taille et les performances de la compilation 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 (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 génère des rapports sur les 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 alerter lorsque les niveaux d'optimisation du code DEX de votre application sont faibles. Cela inclut l'obscurcissement, la réduction 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 revient à l'heuristique d'obscurcissement comme proxy 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 n'atteint pas les pourcentages minimaux définis pour l'optimisation du code. Pour obtenir des définitions détaillées de la réduction, de l'optimisation et de l' obscurcissement, consultez Utiliser l'analyseur de configuration R8.

Pour les applications créées avec le dernier correctif d'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 de l'heuristique DEX si le fichier de mappage n'est pas disponible.

Pour les applications optimisées avec un autre optimiseur de code, Android Vitals effectue une analyse pour estimer le pourcentage de classes, de méthodes et de champs obscurcis dans l'app bundle.

Minimums de taille DEX totale

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 de taille DEX totale suivantes :

  • Applications : le bundle contient au moins 10 Mo de code DEX mesuré en taille non compressée.
  • Jeux : le bundle contient au moins 50 Mo de code DEX mesuré en taille non compressée.

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

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

Mesurer localement l'optimisation du code R8

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 du rapport ne correspondent pas aux valeurs d'Android Vitals, car ces pourcentages 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 scores d'optimisation du code DEX faibles, consultez les recommandations basées sur votre système de compilation et votre optimiseur :

Plug-in Android Gradle et R8

Pour améliorer vos scores d'optimisation du code DEX R8, consultez les conseils de la section 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 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.
  • Faites très attention aux fichiers les plus volumineux lorsque vous activez le "Désobscurcir les noms" bouton (remarque : vous devez importer un mapping.txt fichier). Si certains de ces fichiers restent volumineux lorsqu'ils sont obscurcis, 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.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 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èques ne sont peut-être pas aussi simples à 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.