Proguard keepclassmembers keeps class *

Proguard keepclassmembers keeps class *

我想知道这是做什么的:

-keepclassmembers class * {
    private <fields>;
}

这条规则真的会阻止所有 类 被混淆吗?

根据 the documentation -keepclassmembers 规则这样做:

Specifies class members to be preserved, if their classes are preserved as well.

在这种情况下,这意味着任何 class 中在收缩阶段幸存下来的所有私有字段都将被保留。

此规则不会阻止 classes 被剥离或混淆。 它仅防止保留 classes 的私有字段被剥离或混淆。

更新:

class * 匹配的内容可能有点令人困惑。一个 * 通常匹配 class 名称中不包含包分隔符的任何部分。但是在这种情况下,它匹配任何 class。文档说:

For convenience and for backward compatibility, the class name * refers to any class, irrespective of its package.