Proguard 规则 -keep vs -keepclassmembers vs -keepclasseswithmembers
Proguard rules -keep vs -keepclassmembers vs -keepclasseswithmembers
我发现自己面临三个看起来非常相似的术语
keep
keepclassmembers
keepclasswithmembers
我不明白这三个规则之间的区别,谁能更好地解释一下区别,也许还有一个例子
1) 保留 - 保留 classes
2) keepclassmembers - 保留 class 字段和方法等成员
3) keepclasseswithmembers - 保留 classes 如果他们满足基于成员
的某些条件
例子
1) 保留所有扩展 android.app.Activity
的 classes
-keep public class * extends android.app.Activity
2) 保留所有名为 CREATOR 的成员(静态字段),条件是它们正在实施 android.os.Parcelable
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
3) 保留所有 classes,如果它们有带有参数(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);
}
我发现自己面临三个看起来非常相似的术语
keep
keepclassmembers
keepclasswithmembers
我不明白这三个规则之间的区别,谁能更好地解释一下区别,也许还有一个例子
1) 保留 - 保留 classes
2) keepclassmembers - 保留 class 字段和方法等成员
3) keepclasseswithmembers - 保留 classes 如果他们满足基于成员
的某些条件例子
1) 保留所有扩展 android.app.Activity
的 classes-keep public class * extends android.app.Activity
2) 保留所有名为 CREATOR 的成员(静态字段),条件是它们正在实施 android.os.Parcelable
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
3) 保留所有 classes,如果它们有带有参数(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);
}