如何使用Proguard在InnerClass中保留特定字段

时间:2016-09-06 07:29:43

标签: java proguard

我有一个java类,它有一些公共方法,我想保留。 (这已经完成) 我还有一个包含静态常量的InnerClass。 该课程有以下结构。

public class MyClass {
    public static MyInnerClass {
        public static final String MY_CONSTANT_1="constant 1";
        public static final String MY_CONSTANT_2="constant 2";
        public static final String MY_CONSTANT_3="constant 3";
        public static final String MY_CONSTANT_4="constant 4";
        public static final int MY_INT_1 = 1;
        public static final int MY_INT_2 = 2;
    }

    public void method1() {    }
    public void method2() {    }
    public void method3() {    }
    public void method4() {    }
}

我想上述课程。我想保留一些部分并删除剩下的部分。 我想保留方法method1& method2。我想保留内部类MyInnerClass。我想保留一些MyInnerClass字段,例如MY_CONSTANT_1MY_CONSTANT_2& MY_INT_1。休息一切都应该删除。

我的节目如下 -

-keep public class com.mypackage.MyClass**
-keepclassmembers class com.mypackage.MyClass** {
    public *** method1(...);
    public *** method2(...);
 }

-keepclassmembers class com.mypackage.MyClass.MyInnerClass** {
    public static final java.lang.String MY_CONSTANT_1;
    public static final java.lang.String MY_CONSTANT_2;
    public static final int MY_INT_1;
}

这适用于顶级类,但我的MyInnerClass为空 我搜索了但是他们中的大多数人要么要么完全删除它,要么保留所有。

如果你们需要更多信息,请告诉我们。 提前致谢

1 个答案:

答案 0 :(得分:1)

您需要使用' $'作为类与其内部类之间的分隔符,规则应该正常工作:

-keepclassmembers class com.mypackage.MyClass$MyInnerClass {
    public static <fields>;
}