[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$flcph4z1vox9y":3},{"code":4,"message":5,"data":6,"timestamp":36},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":22,"summary_md":23,"topic":24,"github_topics":27,"license":32,"homepage":33,"updated_at":34,"history":35},"skylot\u002Fjadx",15,"Dex to Java decompiler","Java",51241,5825,723,4968,[16],{"id":17,"title":18,"points":19,"comments":20,"posted_at":21},43547227,"Dex to Java Decompiler",1,0,"2025-04-01","把 Android APK 和 Dalvik 字节码还原成可读 Java，服务于逆向与安全分析人员。","## 解决什么问题\n拿到一个 APK、AAB 或一堆 `.dex` 文件，你真正想要的是能读的 Java 源码。但要走到这一步，得先解包、解二进制 AndroidManifest、翻译 Dalvik 字节码、处理资源表，还要应付混淆后的名字——每一步都是一个独立工具。jadx 把整条链路收进一个命令行或一个窗口：反编译、解资源、输出接近可读的源码，一次完成。\n\n## 有什么不同\n传统 Android 逆向是一条流水线：`apktool` 解包和资源，`dex2jar` 把字节码转成 JAR，再用 CFR、Procyon 之类的 Java 反编译器出源码。jadx 跳过中间的 JAR，直接反编译 Dalvik，好处是上下文能保留得更多——资源解码、资源名解析、内置的反混淆都落在同一份输出里，而不是靠手工拼起来。GUI 的跳转声明、查找引用、全文搜索让它可以当浏览环境用，而不只是一次性转换器；smali 调试器也超出了普通反编译器的范围。代价是反编译器共有的：README 明确写了无法 100% 反编译，遇到非常规字节码就要预期碎片化或 fallback 输出。\n\n## 适合谁\n安全研究员、恶意软件分析师，以及审计第三方 SDK、或手头已经没有源码却要还原逻辑的 Android 开发者。需要批量或脚本化分析的人用 CLI 更顺手，输出目录、线程数、反编译模式都能配；交互式浏览交给 jadx-gui，也方便把结果直接递给同事看。它不是用来重建一个能完整编译的 Android 工程的——Gradle 导出确实存在，但只是起点而非保证；如果你主要想改资源再重打包，apktool 那套流程仍然更合适。\n\n## 上手成本\n需要 64 位 Java 11 以上运行时，或者直接用带 JRE 的 `with-jre` 发行包；Arch、Homebrew、Flathub 都有包，Maven Central 上也有构件，方便把反编译器嵌进自己的工具。对一个这么老的项目来说，README 意外地完整：选项、安装方式、排错 wiki 都在。Apache-2.0 许可让商用和内部使用没有额外顾虑。主要成本其实是预期管理：混淆过的代码只能部分还原，这一点作者自己在 README 里就说了。\n\n## 点评\n在 Android 工具里，这几乎是最稳的那一类：2013 年创建，至今仍在发版，本月在 Java 月榜上以 +720 排到第 15。它的年头体现在选项数量和 wiki 的厚度上，而不是停滞；说到「把这个 APK 反编译一下」，大多数人第一个想到的就是 jadx。只要你会做 Android 逆向，问题就不是要不要用，而是针对目标该选哪种模式和参数。把这个 GUI 当成够用而非精致即可，凡是需要重复执行的活儿，走 CLI。",{"slug":25,"name":26},"developer-tools","开发工具",[28,29,30,31],"android","decompiler","dex","java","Apache-2.0",null,"2026-10-24T20:06:22Z",[],1792887638]