【问题标题】:How to keep specific fields in InnerClass using Proguard如何使用 Proguard 在 InnerClass 中保留特定字段
【发布时间】:2016-09-06 07:29:43
【问题描述】:

我有一个 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() {    }
}

我想proguard上述课程。我想保留一部分并删除剩余的部分。 我想保留method1method2 的方法。我想保留内部类MyInnerClass。我想保留MyInnerClass 的一些字段,例如MY_CONSTANT_1MY_CONSTANT_2MY_INT_1。其余的都应该删除。

我的proguard如下--

-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 是空的 我搜索过,但他们中的大多数人告诉要么完全删除它,要么保留所有。

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

【问题讨论】:

    标签: java proguard


    【解决方案1】:

    你需要使用'$'作为一个类和它的内部类之间的分隔符,那么规则应该可以正常工作:

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

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多