有没有办法从.dex文件中获取所有类的列表?

我有一个.dex文件,称之为classes.dex

有没有一种方法来“读取”该类的内容,并获得所有类的列表,作为完整的类名,包括它们的包, com.mypackage.mysubpackage.MyClass ,例如?

我正在考虑com.android.dx.dex.file.DexFile ,但我似乎无法find检索一整套类的方法。

您可以使用dexlib2库作为独立库( maven中可用 )来读取dex文件并获取类的列表。

 DexFile dexFile = DexFileFactory.loadDexFile("classes.dex", 19 /*api level*/); for (ClassDef classDef: dexFile.getClasses()) { System.out.println(classDef.getType()); } 

请注意,类名称的forms是“Ljava / lang / String;”,这是如何将它们存储在dex文件(以及java类文件)中。 要转换,只需删除第一个和最后一个字母,并replace/。

使用Android-SDK中的命令行工具dexdump 。 它在$ANDROID_HOME/build-tools/<some_version>/dexdump 。 它打印了比你想要的更多的信息。 我没有find让dexdump不那么冗长的方法,但是

 dexdump classes.dex | grep 'Class descriptor' 

应该pipe用。

您可以使用dex2jar实用程序将.dex转换为.jar.

http://code.google.com/p/dex2jar/

然后你可以提取.jar文件。

另外,你可以使用这个框架

Dedexer

baksmali有function可以从baksmali v2.2开始。

baksmali list classes my.dex将打印给定的dex文件中的所有类的列表。