Proguard中的-if是什么意思?

4

以下是Proguard规则(以Kotlin序列化为例):

-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
    static <1>$Companion Companion;
}

在上述规则的背景下,-if 的含义是什么?我尝试查看官方的proguard文档,但没有找到易于理解的相关信息。

1个回答

5
我写了这些ProGuard规则 :) 有关这些更改的拉取请求讨论可能提供相关背景
我理解您的困惑,ProGuard规则文档相当简略

-if class_specification

指定必须存在的类和类成员,以激活后续的保留选项(-keep,-keepclassmembers,...)。条件和后续的保留选项可以共用通配符和通配符引用。例如,您可以在满足项目中存在相关名称的类的情况下保留类,使用像Dagger和Butterknife这样的框架。

正如您从中复制规则的注释所写的那样:
# Keep `Companion` object fields of serializable classes.
# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects.
-if @kotlinx.serialization.Serializable class **
...

因此,-if @kotlinx.serialization.Serializable class ** 应该被理解为:对于所有具有 @Serializable 注释的类(即 "可序列化类"),-keepmembers 中的 <1> 随后引用通配符 **,即完全限定类名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接