日志日期 · 周二
R8 配置分析器:量化 keep 规则对混淆的限制
Android 开发者博客介绍 R8 Configuration Analyzer,可给出收缩、优化、混淆评分并指出过宽的 keep 规则。
当天发生了什么
2026-08-18(博客所示日期,太平洋时间),Android Developers Blog 发布了 Tinder 的案例文章,介绍 R8 Configuration Analyzer。文章说明,该分析器以收缩、优化、混淆三个评分报告 R8 的效果,并指出过宽、冗余或已失效的 keep 规则,包括来自外部库的 consumer 规则。它已集成进 AGP 9.3,release 构建会在 build/outputs/mapping/release/configanalyzer.html 生成报告;也可用 analyzeReleaseR8Config 任务单独生成。Tinder 通过报告发现一个内部库的宽泛 keep 规则阻碍了大量依赖的优化,调整后 R8 评分从 28% 升到 50%,文中还报告了冷启动和下载体积的改善。
对保护应用逻辑意味着什么
这件事对保护的意义在于「混淆评分」:它衡量的是有多少类、方法、字段能被 R8 重命名。过去一条宽泛的库规则就可能让大片代码保留原名,而团队往往并不知道。名称是人和 AI 阅读反编译代码时最便宜的线索,能看到这个比例,比凭感觉判断「已开启混淆」诚实得多。但也要说清边界:评分反映的是 R8 能做多少重命名和优化,不代表抗分析强度。字符串常量、控制流和网络协议仍然可见,评分再高,硬编码密钥和本地规则依然可以被读出。
可以做的检查
在自己的 release 构建上生成报告,先看混淆评分和被列为宽泛的规则,尤其是来自第三方库的部分。逐条确认这些规则是否真的需要,例如反射、序列化或 JNI 入口,能收窄就收窄。收窄后必须在真实 release 构建上跑端到端测试,因为 keep 规则错误通常只在运行时暴露。参考 Tinder 的做法,在 CI 中记录评分变化,防止新依赖悄悄拉低。最后确认 mapping 文件被私密保存,用于崩溃还原而不随包发布。
行动清单
- 在 release 构建上生成 R8 配置分析报告
- 收窄第三方库带来的宽泛 keep 规则并回归测试
- 在 CI 中记录混淆评分变化
原始资料
- Android Developers Blog: Tinder cuts app cold starts by 47% with new R8 Configuration Analyzer · 资料日期 2026-08-18 · 核对于 2026-10-12