对于以下 Proguard 规则(以 Kotlin 序列化为例)
-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
static <1>$Companion Companion;
}
在这里,-if
在上述规则的上下文中的含义是什么?我尝试查看官方的专业保护文档,但找不到有关该文档的任何简单信息
我写了那些ProGuard规则。 :)有关这些更改的拉取请求讨论可能会提供相关背景。
我理解您的困惑,ProGuard 规则文档非常稀疏。
-if
class_specification指定
present
激活后续保留选项(-keep
,-keepclassmembers
,...)。条件和后续的 keep 选项可以共享通配符和对通配符的引用。例如,您可以 保留类的条件是具有相关名称的类存在于 你的项目,使用像dagger和黄油刀这样的框架。
正如您从以下位置复制的规则注释中所写:
# 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>
随后引用**
通配符,即完全限定的类名。