“-keep class ...”规则是否包括 public 和内部 classes?
Does "-keep class ..." rule include public and inner classes?
如果我有如下proguard规则...
-keep class com.mycompany.myapp.** { *; }
...那么下面的两条规则是不是已经过时和不必要了...
-keep public class com.mycompany.myapp.** { *; }
-keep class com.mycompany.myapp.SomeClass$* { *; }
?
即前一条规则是否取代并包括后两条规则?
你是对的
-keep class com.mycompany.myapp.** { *; }
覆盖其他两个规则。这是一个例子:
Proguard 之前:
package com.mycompany.myapp;
public class Main {
public static void main(String[] args) { new Main().init(); }
private void init(){
PackageInnerClass pic1 = new Main.PackageInnerClass();
PublicInnerClass pic2 = new Main.PublicInnerClass();
PrivateInnerClass pic3 = new Main.PrivateInnerClass();
}
class PackageInnerClass { void method1() { System.out.println("Method 1"); } }
public class PublicInnerClass { void method2() { System.out.println("Method 2"); } }
private class PrivateInnerClass { void method3() { System.out.println("Method 3"); } }
}
Proguard 之后 (根据您的规则):
唯一的区别是 classes 被移动到它们自己的 .class 文件中。但在功能上它们是相同的。
如果我有如下proguard规则...
-keep class com.mycompany.myapp.** { *; }
...那么下面的两条规则是不是已经过时和不必要了...
-keep public class com.mycompany.myapp.** { *; }
-keep class com.mycompany.myapp.SomeClass$* { *; }
?
即前一条规则是否取代并包括后两条规则?
你是对的
-keep class com.mycompany.myapp.** { *; }
覆盖其他两个规则。这是一个例子:
Proguard 之前:
package com.mycompany.myapp;
public class Main {
public static void main(String[] args) { new Main().init(); }
private void init(){
PackageInnerClass pic1 = new Main.PackageInnerClass();
PublicInnerClass pic2 = new Main.PublicInnerClass();
PrivateInnerClass pic3 = new Main.PrivateInnerClass();
}
class PackageInnerClass { void method1() { System.out.println("Method 1"); } }
public class PublicInnerClass { void method2() { System.out.println("Method 2"); } }
private class PrivateInnerClass { void method3() { System.out.println("Method 3"); } }
}
Proguard 之后 (根据您的规则):
唯一的区别是 classes 被移动到它们自己的 .class 文件中。但在功能上它们是相同的。