web-dev-qa-db-fra.com

Affichage du nombre de méthodes dex par package

Je travaille sur Android qui se heurte à la limite de nombre de méthodes dex. Existe-t-il un moyen simple d'afficher le nombre de méthodes groupé par package? Je peux obtenir le nombre total de méthodes, mais mon application a plusieurs composants et j'essaie de déterminer quel composant est le plus gros contributeur.

34
ajma

Cela vous donnera une idée de la contribution de chaque hiérarchie de packages au nombre de méthodes. Les résultats incluent toutes les classes de ce répertoire/package et tous les sous-répertoires/packages.

baksmali blah.apk -o out
cd out
find * -type d -print -exec sh -c "smali {} -o {}/classes.dex && sh -c \"dexdump -f {}/classes.dex | grep method_ids_size\"" \;

Cette version légèrement modifiée est similaire, sauf qu'elle ne concerne que les classes de ce répertoire/package particulier, à l'exclusion des sous-répertoires/sous-packages

baksmali blah.apk -o out
cd out
find * -type d -print0 | xargs -0 -I{} sh -c "echo {} && find {} -maxdepth 1 -name \"*.smali\" -print0 | xargs -r -0 smali -o {}/classes.dex"
find -name "*.dex" -print -exec sh -c "dexdump -f {} | grep method_ids_size" \;
21
JesusFreke

J'ai écrit un dex-method-counts outil qui génère une méthode par paquet compte plus rapidement et plus précisément que les outils basés sur smali référencés dans la réponse de JesusFreke¹. Il peut être installé à partir de https://github.com/mihaip/dex-method-counts .

[1] ce script démonte le .dex et le réassemble par package, mais cela signifie que les méthodes référencées par plusieurs packages sont comptées deux fois

45
Mihai Parparita

Moi et un collègue avons publié le mois dernier un service qui peut vous aider avec votre objectif: http://www.methodscount.com/ . Il montre le nombre de méthodes et d'autres informations soignées

enter image description here

Sous le capot, nous utilisons gradlew pour obtenir les dépendances et Android SDK tool dx pour calculer les informations dex. Nous appliquons la procédure récursivement à la bibliothèque et ses dépendances. Nous persistons également les résultats pour les bibliothèques déjà calculées afin d'accélérer le processus sur les demandes conséquentes.

Si vous utilisez Android Studio ou IntelliJ, vous pouvez simplement installer le plugin pour avoir toutes les informations comme un conseil pratique (le plugin utilise également le service).

17
Nicola Miotto

Sur une vieille question, j'ai écrit un plugin Gradle qui rapportera le nombre de méthodes dans votre APK sur chaque build. Il utilise le même code d'analyse DEX que le projet AOSP utilise. Vous pouvez le trouver sur https://github.com/KeepSafe/dexcount-gradle-plugin .

13
Ben

J'ai apprécié le travail de tous les développeurs ci-dessus et je suis toujours heureux d'avoir une telle communauté, mais depuis Android studio 2.2, l'équipe Google a publié APK Analyzer -> https: // développeur .Android.com/studio/build/apk-analyzer.html

Maintenant, nous avons tous un outil intégré pour analyser le nombre de méthodes, la taille de nos ressources et même nous pouvons comparer deux fichiers .apk l'un contre l'autre. Enfin, nous avons tous cet outil intégré. Android devient de plus en plus facile.

BTW: Pour trouver le nombre de méthodes dont vous disposez, ouvrez votre fichier .apk dans Android Studio (support 2.2+ uniquement)) et cliquez sur le fichier classes.dex. Après cela, vous pourrez voir les méthodes comptent dans toutes les bibliothèques et dans votre projet également.

8
Stoycho Andreev

Vous pouvez également essayer d'utiliser https://github.com/KeepSafe/dexcount-gradle-plugin qui vous permet de voir graphiquement le nombre de méthodes par package via un html.

1
Mark Pazon