未能充分理解{----}之后的重要性 - 请问有人可以采取以下示例并解释其中的区别吗?
声明1
-keep public class * extends android.view.View ;
声明2
-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*(...);
}
声明3
-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*(...);
}
答案 0 :(得分:2)
这一行:
-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
则保留班级成员和班级。