J'ai un .dex
fichier, appelez-le classes.dex
.
Existe-t-il un moyen de "lire" le contenu de ce classes.dex
et obtenir une liste de toutes les classes en tant que noms de classe complets, y compris leur package, com.mypackage.mysubpackage.MyClass
, par exemple?
Je pensais à com.Android.dx.dex.file.DexFile
, mais je n'arrive pas à trouver une méthode pour récupérer un ensemble complet de classes.
Vous pouvez utiliser la bibliothèque dexlib2 comme bibliothèque autonome ( disponible dans maven ), pour lire le fichier dex et obtenir une liste de classes.
DexFile dexFile = DexFileFactory.loadDexFile("classes.dex", 19 /*api level*/);
for (ClassDef classDef: dexFile.getClasses()) {
System.out.println(classDef.getType());
}
Notez que les noms de classe seront de la forme "Ljava/lang/String;", qui est la façon dont ils sont stockés dans le fichier dex (et dans un Java). Pour convertir, supprimez simplement la première et la dernière lettre et remplacez/par.
Utilisez l'outil de ligne de commande dexdump
à partir du SDK Android. C'est dedans $Android_HOME/build-tools/<some_version>/dexdump
. Il imprime beaucoup plus d'informations que vous ne le pensez probablement. Je n'ai pas trouvé de moyen de rendre dexdump
moins verbeux, mais
dexdump classes.dex | grep 'Class descriptor'
devrait marcher.
Vous pouvez utiliser dex2jar
utilitaire qui convertira .dex
à .jar.
http://code.google.com/p/dex2jar/
Ensuite, vous pouvez extraire ce .jar
fichier.
Vous pouvez également utiliser ce cadre
baksmali a des fonctionnalités pour ce faire à partir de baksmali v2.2.
baksmali list classes my.dex
affichera une liste de toutes les classes dans le fichier dex donné.