有没有办法从 .dex 文件中获取所有类的列表?
我有一个文件,叫它。.dex
classes.dex
有没有办法“读取”其中的内容,并获取其中所有类的列表作为完整的类名,包括它们的包,以示清楚?classes.dex
com.mypackage.mysubpackage.MyClass
我正在考虑com.android.dx.dex.file.DexFile
,但我似乎找不到检索整套类的方法。
我有一个文件,叫它。.dex
classes.dex
有没有办法“读取”其中的内容,并获取其中所有类的列表作为完整的类名,包括它们的包,以示清楚?classes.dex
com.mypackage.mysubpackage.MyClass
我正在考虑com.android.dx.dex.file.DexFile
,但我似乎找不到检索整套类的方法。
使用 Android-SDK 中的命令行工具。它在.它打印的信息比您想要的要多得多。我没有找到一种方法来减少冗长,但是dexdump
$ANDROID_HOME/build-tools/<some_version>/dexdump
dexdump
dexdump classes.dex | grep 'Class descriptor'
应该工作。
您可以将 dexlib2 库用作独立库(在 maven 中可用),以读取 dex 文件并获取类列表。
DexFile dexFile = DexFileFactory.loadDexFile("classes.dex", 19 /*api level*/);
for (ClassDef classDef: dexFile.getClasses()) {
System.out.println(classDef.getType());
}
请注意,类名的形式为“Ljava/lang/String;”,这就是它们在dex文件(和java类文件)中的存储方式。要进行转换,只需删除第一个和最后一个字母,然后将 / 替换为 。