外观
如何防止某些类或方法被 R8 移除或混淆?
标准回答
在 R8 规则文件中针对反射、序列化或 JNI 入口配置精确的 -keep、-keepclassmembers 等规则,必要时保留所需属性。-keep 通常同时约束删除和名称变化;仅保留名称不保证类不会被移除,别用整包全保留掩盖规则缺失。
通俗例子
JSON 框架通过反射创建某个模型,如果规则缺失,字段名变化或构造器被移除就可能出错;不要为省事保留整个应用所有类。
深入解释
**为什么静态分析可能漏掉:**直接调用某类时关系清楚;如果类名来自字符串、服务配置或外部框架,R8 可能无法完整推断它仍会被使用。
**保留到什么程度:**针对真实动态入口保留需要的类、成员或名称,避免粗暴保留整个应用。规则过宽会削弱优化,规则过窄会导致 Release 特有的崩溃。
内容来源
- Android · AI Agent 知识手册 · 原条目
9.3.2