我保留了 class 及其成员免受 Proguards 混淆,但静态最终成员被混淆了?

I've kept a class and its members from Proguards obfuscation, but a static final member is obfuscated?

我有这个class

public class MyClass extends StringType implements ProtectedAgainstProguard {

    private static final String delimiter = "#";
    private static final MyClass singleton = new MyClass ();

    private MyClass() {
        super(someStuff);
    }

    public static MyClass getSingleton() {
        return singleton;
    }

    @Override
    public Object someMethodA() {

    }

    @Override
    public Object someMethodB() {

    }
}

这是我的 ProGuard 配置:

-keep public interface com.example.android.application.ProtectedAgainstProguard
-keep public class * implements com.example.android.application.ProtectedAgainstProguard
-keep class * implements com.example.android.application.ProtectedAgainstProguard
-keep public class * extends com.example.android.application.ProtectedAgainstProguard
-keep class * extends com.example.android.application.ProtectedAgainstProguard

这里是 mapping.txt 这个 class

com.example.android.domain.MyClass -> com.example.android.domain.MyClass :
    com.example.android.domain.MyClass singleton -> a
    15:16:void <init>() -> <init>
    24:28:java.lang.Object someMethodA() -> someMethodA
    34:38:java.lang.Object someMethodB() -> someMethodB
    12:12:void <clinit>() -> <clinit>

如您所见,static final 单例(不知道它的成员或方法,我认为它的方法被混淆了。 我如何告诉混淆器让它的手远离整个 class 和其中的所有内容? 我不想列出我想保留的特定 classes 和它们的特定 methods/members,我只想要一个通用规则 "don't do ANYTHING to a class that implements ProtectedAgainstProguard "

原来为了保护 class 的成员,我们需要在规则末尾添加 { *; } - 因为 keep 本身不是很有用.

-keep public interface com.example.android.application.ProtectedAgainstProguard { *; }
-keep public class * implements com.example.android.application.ProtectedAgainstProguard { *; }
-keep class * implements com.example.android.application.ProtectedAgainstProguard { *; }
-keep public class * extends com.example.android.application.ProtectedAgainstProguard { *; }
-keep class * extends com.example.android.application.ProtectedAgainstProguard { *; }

你可以使用这个:--

-keep interface com.example.android.application.ProtectedAgainstProguard {*;}
-keepclasseswithmembers class * implements com.example.android.application.ProtectedAgainstProguard{*;}
-keepclasseswithmembers interface * extends com.example.android.application.ProtectedAgainstProguard{*;}