快速结论:Android 混淆不是一个开关。稳定发布通常需要 R8 代码混淆、精确 keep 规则、mapping 归档、可选资源混淆,以及对最终 APK/AAB 做真实运行测试。
开发者常问的问题
- Android App 应该如何做混淆?
- R8、ProGuard 规则和资源混淆有什么区别?
- AAB 文件可以混淆吗?
- 如何避免混淆后崩溃?
快速答案
大多数应用应从 release 构建启用 minifyEnabled 开始,配合默认 optimized ProGuard 文件,补充运行时敏感 keep 规则,归档 mapping.txt,然后测试签名后的 release 产物。
代码混淆与资源混淆
代码混淆由 R8 处理类名、方法名和字节码优化;资源混淆处理 Android 资源名;keep 规则保护反射、序列化、SDK 回调和 native 入口;mapping 文件用于还原线上崩溃堆栈。
通常会破坏什么
最容易出问题的是反射、JSON 序列化、依赖注入、Room/Parcelable、第三方 SDK 动态调用资源,以及没有保存 mapping 导致线上 crash 难以阅读。
ADB Pro 如何帮助
R8 Assistant 帮助审查规则、反射风险、mapping 和字典;Res Guard 管理资源混淆与白名单;Release Readiness 检查最终 release 包是否具备发布条件。
FAQ:AAB 可以混淆吗?
可以。混淆发生在 release 构建阶段,输出 APK 或 AAB 都可以包含混淆后的代码;资源混淆也可以应用到 AAB 工作流,但需要正确白名单。
FAQ:混淆能防止逆向吗?
不能绝对防止。它提高分析成本,但密钥和敏感业务逻辑仍应通过服务端设计和安全架构保护。
FAQ:为了避免崩溃可以 keep 所有东西吗?
不建议。过宽 keep 规则会显著降低混淆价值,应使用有依据的定向规则,并测试签名 release 包。
相关指南
Android Code Obfuscation Guide、Android AAB Resource Obfuscation Guide 和 R8 minifyEnabled 说明可以继续深入。