我有一个名为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类文件)中存储的方式。要进行转换,只需删除第一个和最后一个字母,并用.替换/即可。您可以使用 dex2jar
工具将 .dex
文件转换为 .jar
文件。
http://code.google.com/p/dex2jar/
然后您可以提取该 .jar
文件。
此外,您还可以使用这个框架:
baksmali list classes my.dex
命令可以列出指定dex文件中的所有类。dxshow mydexfile.dex
dxshow:
strings -a $1 | grep "^L.*/" | grep -v "Ljava" | grep -v "Landroid" | sed "s/^L\(.*\);/\1/" | sed "s:/:.:g"
ezpz hack... 不想花费一生的时间来编写Java代码
dexdump classes.dex | findstr 'Class descriptor'
。该命令用于输出classes.dex文件中所有类的描述符。 - naXa stands with Ukrainecd
到你提取它的目录,并在PowerShell中执行命令。 - naXa stands with UkrainePATH
中。 - TWiStErRob