dex2jar 入门:把 APK 里的 dex 变成能打开的 JAR,3 条命令上手
你拿到一个 APK,解开后想读里面的代码,第一眼看到的全是 .dex 二进制文件。dex2jar 干的事就一件:把 .dex 转成 .class 打进 JAR,丢进 IDE 反编译器就能读。
装好之后,你还能用它把 dex 拆成 smali 文本、改完再编回 dex。读完这篇,你能独立完成 3 件事:装好 dex2jar、跑通 dex 转 jar、改完 smali 再编译回去。
30 秒认识 dex2jar
一句话:dex 和 java class 之间的翻译器,读 dex、写 dex、双向转换都管。
和 smali 工具链相比,dex2jar 不用额外装包,一个发行包里 smali 和 baksmali 脚本都自带。
- 你想把 APK 丢进 IDEA 看代码,它能给你产出 target-dex2jar.jar。
- 你想在指令级改 dex,它能拆成 smali、改完编回去。
- 你想一次处理多个 dex 文件,它能批量转出多个 JAR。
装好并跑起来
整个安装就 3 步,装完 bin 目录下的脚本都能直接跑。
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/de/dex2jar && cd dex2jar
- 构建发行包,约几分钟:
./gradlew distZip
- 解压到当前目录,得到 bin 和 lib 两个目录:
cd dex-tools/build/distributions && unzip dex-tools-2.x.zip
三个场景用它干活
场景一:dex 转 jar
你要什么:一个能在 IDE 里反编译的 JAR,代码以 .class 形式躺在里面。
怎么做:
sh bin/d2j-dex2jar.sh -f /path/to/target.apk
得到什么:当前目录生成 target-dex2jar.jar。文件名规则是"原文件名 -dex2jar.jar",加 -f 才能覆盖同名旧文件。
场景二:dex 拆成 smali 改完再编译
你要什么:可读可改的指令级文本,用来定位问题或做修改。
怎么做:先拆,再编回去。
sh bin/d2j-baksmali.sh -o out_smali /path/to/classes.dex
sh bin/d2j-smali.sh -o out.dex out_smali
得到什么:out_smali 目录下按包分层的 .smali 文件,改完编译出 out.dex,可直接替换回 APK。
场景三:多个 dex 批量处理
你要什么:一次转出全部 dex,不用逐个敲命令。
怎么做:把通配符丢给 d2j-dex2jar.sh,它会逐个转换。
sh bin/d2j-dex2jar.sh classes*.dex
得到什么:当前目录生成 classes-dex2jar.jar、classes2-dex2jar.jar,每个 dex 对应一个 JAR。注意:APK 直接丢给 dex2jar 时,内部所有 dex 会自动合并成一个 JAR,不需要你手动拆。
踩坑与排查
- 症状:提示"xxx exists, use --force to overwrite",什么也没转出来。解法:这是输出文件已存在的安全检查,加 -f 参数强制覆盖。
- 症状:转换结束多出一个 xxx-error.zip。解法:里面有失败类的详细报告,逐个对照排查;dex 本身没问题时可加 --skip-exceptions 跳过异常处理。
- 症状:提示 "Can not find classes.dex in zip file"。解法:你给的文件里没有 dex,确认它不是被二次压缩过的包,或者路径写错了。
- 症状:大 APK 转换慢或中途报读取出错。解法:先加 --skip-exceptions 快速产出结果,需要保真度时再去掉该参数重跑。
想深入?从这里看源码
- dex-translator 转换链路:dex 到 jar 的核心转换代码,Dex2IR 到 IR2J 两段。
- d2j-smali 反汇编与汇编:smali 解析和生成逻辑。
- dex-writer dex 文件生成:改完 smali 后写回 dex 的地方。
想动手改的话,fork 仓库、拉特性分支、提 PR 就行。
结尾
dex2jar 就是一个 dex 与 class 互转的命令行工具箱,装好 3 分钟,常用命令 3 条。
资源清单:
- 使用文档:README.md
- 许可证:LICENSE.txt,Apache 2.0
- 项目 issue:仓库 issues 页(GitHub:pxb1988/dex2jar),报 bug 和提问都去那里
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



