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

ior*_*vic 46 java android class dx dex

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

有没有办法"读取"它的内容classes.dex并获得所有类的列表作为完整的类名,包括它们的包com.mypackage.mysubpackage.MyClass,为exmaple?

我在考虑com.android.dx.dex.file.DexFile,但我似乎无法找到一个检索整个类的方法.

jcs*_*ica 105

使用dexdumpAndroid-SDK中的命令行工具.它在$ANDROID_HOME/build-tools/<some_version>/dexdump.它打印的信息比您想要的要多得多.我没有找到一种方法来dexdump减少冗长,但是

dexdump classes.dex | grep 'Class descriptor'
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • 我不知道这是OSX还是因为我有一个不同的ADT版本...但对我来说dexdump工具是在sdk/build-tools/<some_version> /而不是在platform-tools /下. (23认同)
  • `dexdump classes.dex | 在windows下查找"类描述符". (5认同)

Jes*_*eke 15

您可以将dexlib2库用作独立库(在maven中可用),以读取dex文件并获取类列表.

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

请注意,类名称的格式为"Ljava/lang/String;",它们是如何存储在dex文件中的(以及java类文件中).要转换,只需删除第一个和最后一个字母,然后替换/.


UVM*_*UVM 11

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

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

然后,您可以提取该.jar文件.

此外,您可以使用此框架

Dedexer

  • 我不需要(也不想)物理反编译并提取`.dex`.我只需要**全套类名称(`字符串`). (3认同)

Jes*_*eke 5

从 baksmali v2.2 开始,baksmali 具有执行此操作的功能。

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

参考:可从此处下载:https : //github.com/JesusFreke/smali