Proguard/R8全局保留规则下排除自定义日志类的实现方案咨询
解决方案
- 首先修改全局keep规则,直接在类匹配规则中加入自定义日志类的排除项,不需要使用
-if否定规则,修改后的规则如下:
# 排除自定义日志类后保留com.mypackage下其余公共类的公共方法 -keep, allowoptimization public class !com.mypackage.MyCustomLogger, com.mypackage.** { public *; }
Proguard/R8支持在类匹配规则中通过!前缀标记排除项,多个匹配项用逗号分隔,规则生效优先级为排除项 > 通配符匹配项,不会影响原有其他类的保留逻辑,也不会额外增加构建耗时。
- 其次确认你原有的自定义日志类
assumenosideeffects规则放在Proguard配置文件的靠前位置,确保R8在执行类保留规则前先识别到日志方法的无副作用标记。 - 额外校验项:
- 确认
MyCustomLogger的v/d/i/w/e方法内部没有除日志输出外的其他业务逻辑,比如本地存储、数据上报等,否则R8会判定方法存在副作用,不会主动移除调用。 - 仅在开启了
minifyEnabled true的release构建下验证效果,debug构建默认关闭代码压缩优化,规则不会生效。
- 确认
内容的提问来源于stack exchange,提问作者Monica Ivan
相关产品推荐
相关产品推荐

