日志日期 · 周五
jadx 1.5.6:调用图模块与 Kotlin 枚举还原
jadx 1.5.6 增加调用图与图形视图,并改进 Kotlin 枚举和字符串 switch 还原,反编译输出继续变得更可读。
当天发生了什么
2026-07-10(UTC 19:07),Android 反编译器 jadx 在 GitHub 发布了 v1.5.6。按发布说明,新功能包括:图形视图与代码窗格同步(PR #2784)、用于处理调用图的新模块(#2890)、资源树折叠单子目录链等界面改进。修复部分包括:枚举还原支持 Kotlin 1.9+ 的 $ENTRIES 模式(PR #2814)和无参构造的枚举(#2821);SwitchOverString 覆盖更多情况;FileTypeDetector 的 XML 解析器加固以防 XML 炸弹拒绝服务(PR #2851);Android 清单数值解析更安全(#2857);支持 XAPK 子目录中的文件(#2834),以及大量反编译细节修正。
对保护应用逻辑意味着什么
这些变化本身都是常规迭代,但累积起来意味着反编译输出越来越接近源码的写法:Kotlin 枚举、按字符串分支的 switch 等编译器生成的模式被还原,读者看到的是更高层的结构;调用图则让人更快把握模块之间的关系。对开发者来说,应当默认 R8 处理后仍保留的内容,例如字符串常量、未被重命名的枚举名、清单信息,都会以较可读的形式呈现,并且这些输出也很适合作为 AI 辅助分析的输入。边界同样要清楚:反编译器看到的只是客户端,服务端逻辑和数据不在其中;而 R8 的重命名和优化仍会去掉大量有意义的名称。
可以在自己的构建上做的检查
第一,把“用当前版本的反编译器打开自己的发布包”纳入发布前审查,看到的就是别人能看到的。第二,重点检查字符串常量中的密钥、内部接口地址和功能开关,以及描述业务规则的枚举和类名,能改名的改名,属于秘密的移到服务端。第三,确认 mapping.txt 等映射文件只保存在内部,没有随包或在公开仓库中泄露。第四,复查 keep 规则,避免为了方便而保留过多类名。第五,每次升级 AGP、R8 或 Kotlin 版本后重复这项检查,因为编译器生成的代码模式会变化,反编译器也在同步跟进。
行动清单
- 发布前用当前反编译器检查自己的发布包
- 清理字符串常量中的密钥、内部地址与开关
- 确认 mapping.txt 不外泄
- 升级 AGP/R8/Kotlin 后重复检查
原始资料
- GitHub: skylot/jadx release v1.5.6 · 资料日期 2026-07-10 · 核对于 2026-10-12