Proguard 中 -if 的含义

Atu*_*pta 4 android proguard kotlinx.serialization

对于以下 Proguard 规则(以Kotlin 序列化为例)

-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
    static <1>$Companion Companion;
}
Run Code Online (Sandbox Code Playgroud)

-if在上述规则的上下文中,的含义是什么?我尝试查看官方 proguard 文档,但找不到任何相关信息

Ste*_*ris 5

我写了那些 ProGuard 规则。:)关于这些更改的拉取请求讨论可能会提供相关背景

我理解您的困惑,ProGuard 规则文档非常稀疏

-if类规范

指定必须present激活后续保留选项(-keep-keepclassmembers、...)的类和类成员。条件和后续的 keep 选项可以共享通配符和对通配符的引用。例如,您可以使用 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 **
...
Run Code Online (Sandbox Code Playgroud)

因此,-if @kotlinx.serialization.Serializable class **应理解为:适用于@Serializable应用了注释的所有类(即“可序列化类”)。in<1>随后-keepmembers指的是**通配符,即完全限定的类名。