Skip to content
阅读进度

如何防止某些类或方法被 R8 移除或混淆? ​

返回 构建与质量门禁 目录

标准回答 ​

在 R8 规则文件中针对反射、序列化或 JNI 入口配置精确的 -keep、-keepclassmembers 等规则,必要时保留所需属性。-keep 通常同时约束删除和名称变化;仅保留名称不保证类不会被移除,别用整包全保留掩盖规则缺失。

通俗例子 ​

JSON 框架通过反射创建某个模型,如果规则缺失,字段名变化或构造器被移除就可能出错;不要为省事保留整个应用所有类。

深入解释 ​

**为什么静态分析可能漏掉:**直接调用某类时关系清楚;如果类名来自字符串、服务配置或外部框架,R8 可能无法完整推断它仍会被使用。

**保留到什么程度:**针对真实动态入口保留需要的类、成员或名称,避免粗暴保留整个应用。规则过宽会削弱优化,规则过窄会导致 Release 特有的崩溃。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。