Proguard/R8 保留规则例外

Proguard/R8 exception to a keep rule

我正在尝试使用 R8/Proguard 删除日志记录,我使用了

-assumenosideeffects class android.util.Log {
    v(...);
    d(...);
    i(...);
    w(...);
    e(...);
}

效果很好。尝试删除 com.mypackage:

中的自定义登录时出现的问题
-assumenosideeffects class com.mypackage.MyCustomLogger {
    v(...);
    d(...);
    i(...);
    w(...);
    e(...);
}

我有一条规则,保留 public 类 的所有 public 方法来自 com.mypackage:

-keep, allowoptimization public class com.mypackage.** {
    public *;
}

由于项目的范围,我无法删除它。该规则似乎覆盖了 assumenosideeffects 规则,这是我的问题:我如何指定此保留规则的例外情况? 我知道 -if 选项但是我还没有看到它在任何地方被用于负面。我试过在 -keep 规则之前写 -if class !com.mypackage.Logger,但是构建花费了很多时间,而且永远不会完成。

我找到了答案,我需要在 keep 规则中添加我的记录器 class,如下所示:

-keep, allowoptimization public class !com.mypackage.MyCustomLogger, com.mypackage.** {
    public *;
}