这一行:
-keep public class * extends android.view.View ;
防止单个类被混淆,而这个:
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
防止(在这种情况下)特定方法被混淆。当涉及括号时,表示该语句适用于多个项目。它也可以用来保留多个类,或者其他你可以保留多个其他东西的东西。您也可以将它用于packages 或通过包中的特定类。由于通配符,整个系统是灵活的。基本上:
-keep something;
表示保留一个,而:
- keep something {
somethingElse
}
根据参数指定要保留的内容。这意味着它可以指定多个保留。 (那个的评论版本:)
- keep something {//When something
somethingElse//keep somethingElse
//... and more as needed
}
它在一定程度上可以与 if 语句相媲美。你有两个不同的:
if(something)
//single line for action
和:
if(something){
//Do multiple things
}
基本上:
-keep //keep if
public class * extends Something //the class extends something
和
-keep //if
public class * extends Something //the class extends something
{
field1//keep field1
//and whatever else is supplied
}
还有你的第三个例子:
-keep public keepclassmembers * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
错了。 keepclassmembers 是您使用 而不是 -keep 的东西。即:
-keepclassmembers public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
而-keepclassmembers 保留类成员,而-keep 保留类成员和类本身。