Proguard规则-keep vs -keepclassmembers vs -keepclasseswithmembers

时间:2017-10-20 18:45:51

标签: android proguard android-proguard

阅读proguard rules

我发现自己面对的三个词似乎非常相似 keep keepclassmembers keepclasswithmembers

我无法理解这三条规则之间的区别,有人可以更好地解释差异,也许也是一个例子

1 个答案:

答案 0 :(得分:2)

1)保持 - 保留班级

2)keepclassmembers - 保留类成员,例如fields&方法

3)keepclasseswithmembers - 如果类满足基于成员的某些条件

,则保留类

<强>实施例

1)保留所有扩展android.app.Activity

的类
-keep public class * extends android.app.Activity

2)如果他们正在实现android.os.Parcelable

,则保留所有名为CREATOR的成员(静态字段)
-keepclassmembers class * implements android.os.Parcelable { 
static ** CREATOR; 
} 

3)如果它们具有带有参数(Context,AttributeSet)或(Context,AttributeSet,int)的构造函数(下面称为init),则保留所有类。

-keepclasseswithmembers class * { 
public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
public <init>(android.content.Context, android.util.AttributeSet, int); 
}