快速结论:R8 支持 ProGuard dictionary 指令,包括类名、成员名和包名混淆字典,但字典只控制命名风格,不能替代 keep 规则和发布测试。
开发者常问的问题
- R8 是否支持 ProGuard obfuscation dictionary?
- 如何配置 -obfuscationdictionary?
- 如何在 mapping.txt 中验证字典输出?
混淆字典做什么
字典控制 R8/ProGuard 重命名时使用的候选名称,例如把类名、方法名或包名映射到特定字符集合。它影响可读性,不决定哪些代码被保留。
字典指令
常见指令包括 -obfuscationdictionary、-classobfuscationdictionary 和 -packageobfuscationdictionary,分别影响成员名、类名和包名。
手动流程
准备字典文件,在 proguard-rules.pro 中引用,执行 release 构建,然后查看 mapping.txt 确认输出名称是否来自预期字典。
字典选项
可选择普通短名、同形字符、希腊/西里尔字符、CJK 字符、编码混淆字符或轻量 confusable 字典。越激进的字典越需要充分测试。
ADB Pro 如何帮助
R8 Assistant 和 ProGuard Dictionaries 页面提供可下载字典、配置说明和 mapping 验证思路,帮助团队把字典作为可审查配置管理。
FAQ:R8 仍然使用 ProGuard 规则语法吗?
是。现代 Android 构建运行 R8,但规则文件仍使用 ProGuard 兼容语法。
FAQ:字典能替代 keep 规则吗?
不能。keep 规则决定符号是否可被删除或重命名,字典只影响最终名称长什么样。
FAQ:如何知道字典生效?
检查 mapping.txt 中的类名、方法名和包名输出,并对 release 产物执行 smoke test。
相关指南
Android APK Obfuscation、R8 minifyEnabled 和 ProGuard Dictionaries 资源页可以一起使用。