我保留了 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{*;}
我有这个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{*;}