Proguard 中 -if 的含义
Posted
技术标签:
【中文标题】Proguard 中 -if 的含义【英文标题】:Meaning of -if in Proguard 【发布时间】:2021-12-18 21:30:14 【问题描述】:对于下面的 Proguard 规则(取Kotlin Serialization)
-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1>
static <1>$Companion Companion;
在上述规则的上下文中,-if
的含义是什么?我尝试查看官方 proguard 文档,但找不到任何相关信息
【问题讨论】:
【参考方案1】:我编写了那些 ProGuard 规则。 :) pull request discussion about these changes may provide relevant background。
ProGuard rules documentation is quite sparse,我理解您的困惑。
-if
class_specification指定必须为
present
的类和类成员才能激活后续的保留选项(-keep
,-keepclassmembers
,...)。条件和随后的保留选项可以共享通配符和对通配符的引用。例如,您可以 在存在具有相关名称的类的条件下保留类 您的项目,使用 Dagger 和 Butterknife 等框架。
正如您复制的规则的 cmets 中所写:
# 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>
随后指代 **
通配符,即完全限定的类名。
【讨论】:
以上是关于Proguard 中 -if 的含义的主要内容,如果未能解决你的问题,请参考以下文章
proguard 是不是将所有枚举转换为 int 或需要为此配置
使用 Gradle 和 ProGuard 构建的 Android:“输出 jar 必须在输入 jar 之后指定,否则将为空”