这是什么?
这是一套用于处理 Android .dex 文件和 Java .class 文件的命令行工具,最有名的用途是把 APK 里的 dex 字节码转换成 jar 文件,方便用 Java 反编译器打开查看。
它是命令行工具,还是给我自己写代码用的库?
两者都是。日常使用是命令行方式(d2j-dex2jar.sh 等脚本),但这个包还自带 dex-reader/writer,这是一个轻量的 Java API,用于读写 .dex 文件,设计上仿照 ASM。
我该怎么弄到一份能用的版本?
从源码构建:在仓库根目录运行 ./gradlew distZip,然后从 dex-tools/build/distributions 里取出 dex-tools-2.1-SNAPSHOT.zip,解压(约 5 MB),再在那个文件夹里运行 d2j-*.sh 脚本。
在运行之前我需要装好什么?
需要一个 JDK:这些工具本质上是 Java 程序,用自带的 Gradle wrapper 构建,通过 shell 脚本启动。README 里没有写明最低要求的 Java 版本。
它能直接给我可读的 Java 源代码吗?
它本身不能:d2j-dex2jar 只是把 .dex 转成打包成 jar 的 .class 文件,你还需要把这个 jar 交给 Java 反编译器,才能得到可读的源代码。
它能在 Windows 上运行吗,还是只能在 Linux/macOS 上用?
README 里只展示了 shell 脚本的用法(sh d2j-dex2jar.sh),所以 Linux 和 macOS 是文档中说明的环境;不过它就是普通的 Java 程序,只要有 JVM 就能运行,只是没有提到 Windows 启动脚本。
smali 是什么?什么时候我会想用它而不是反编译器?
smali 是一种汇编风格、人类可读的 Dalvik 字节码表示形式。baksmali 可以把 dex 转成你能阅读或编辑的 .smali 文件,smali 再把它们汇编回 dex——这样你就能修改应用的代码,而不只是查看它。
我能直接给它一个完整的 APK 吗,还是只能用单独的 .dex 文件?
APK 可以直接使用:README 的示例就是把 APK 路径直接传给脚本——sh d2j-dex2jar.sh -f ~/path/to/apktodecompile.apk——然后输出 apktodecompile-dex2jar.jar。
它的 smali/baksmali 和知名的原始版本有什么不同?
这是一个语法相同的独立实现,并且扩展支持了类型描述符中的转义字符——当类名里包含常规工具无法处理的特殊字符时,这个功能就很有用。
有现成的可执行文件吗,还是我必须自己构建?
README 顶部链接了 GitHub Releases,但文档中介绍的方式是自己构建 zip 包:运行 ./gradlew distZip 会生成 dex-tools-2.1-SNAPSHOT.zip(约 5 MB),解压后即可运行。
What are similar projects?
ASC, bytecode-viewer, jadx, Apktool, rea, GhidraMCP, ghidra-mcp, Rise-6.9.5
Which topics is it in?
dex, obfuscation, apk, reverse-engineering, security-tools, utility, java, android, security, tool, apache-2.0, cli