我有一个.dex
文件,称之为classes.dex
。
有没有办法“读取”classes.dex
的内容,并获取其中所有类的列表作为完整的类名,包括其包com.mypackage.mysubpackage.MyClass
,例如?
我在考虑com.android.dx.dex.file.DexFile
,但我似乎找不到一种检索整个类的方法。
答案 0 :(得分:98)
使用Android-SDK中的命令行工具dexdump
。它在$ANDROID_HOME/build-tools/<some_version>/dexdump
。它打印的信息比您想要的要多得多。我找不到让dexdump
更简洁的方法,但是
dexdump classes.dex | grep 'Class descriptor'
应该有用。
答案 1 :(得分:12)
您可以使用dexlib2 library作为独立库(available in 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类文件中)。要进行转换,只需删除第一个和最后一个字母,然后将/替换为。
答案 2 :(得分:11)
答案 3 :(得分:2)
baksmali具有从baksmali v2.2开始执行此操作的功能。
baksmali list classes my.dex
将打印给定dex文件中所有类的列表。
答案 4 :(得分:-1)
dxshow mydexfile.dex
dxshow:
字符串-a $ 1 | grep“ ^ L。* /” | grep -v“ Ljava” | grep -v“ Landroid” | sed“ s / ^ L \(。* \); / \ 1 /” | sed“ s:/:。:g”
ezpz hack ...不想花一辈子的Java编码