我有一个.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 类文件)中的存储方式。要转换,只需删除第一个和最后一个字母,并将 / 替换为 .
从 baksmali v2.2 开始,baksmali 具有执行此操作的功能。
baksmali list classes my.dex
将打印给定 dex 文件中所有类的列表。
参考:可从此处下载: https ://github.com/JesusFreke/smali 。
dxshow mydexfile.dex
dxshow:
字符串-a $1 | grep "^L.*/" | grep -v "Ljava" | grep -v "Landroid" | sed "s/^L\(.*\);/\1/" | sed "s:/:.:g"
ezpz hack...不想花一生的时间进行Java编码