外观
如何使用 ProGuard/R8 混淆代码以增加反编译难度?
标准回答
R8 会删除无用代码、做优化,并把名称变短;这能增加阅读成本,但不能把客户端变成保密保险箱。
通俗例子
反编译后方法名可能从 loadUser 变成 a,逻辑仍可能被分析。密钥和真正的授权决策不能只藏在混淆代码里。
深入解释
**混淆实际改了什么:**把可改名的类、方法和字段换成更难读的名字,提高直接读懂代码的成本。R8 还可能移除无用代码或进行优化,这些不是同一项工作。
**为什么需要保留规则:**反射、序列化或 native 代码可能按名字访问某个类,静态分析未必看得出来。需要有针对性地保留这些入口,并测试混淆后的 Release 包。
内容来源
- Android · AI Agent 知识手册 · 原条目
8.5.2