“-keep class ...”规则是否包括公共和内部类?

时间:2016-05-13 17:13:38

标签: proguard android-proguard

如果我有以下规则......

-keep class com.mycompany.myapp.** { *; }

......然后是以下两条规则已过时且不必要......

-keep public class com.mycompany.myapp.** { *; }
-keep class com.mycompany.myapp.SomeClass$* { *; }

即。前一条规则是否取代并包括后两条?

1 个答案:

答案 0 :(得分:1)

你是对的

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之前:

{{1}}

Proguard (带有你的规则)后enter image description here

唯一的区别是类被移动到它们自己的.class文件中。但在功能上他们是一样的。