如何使用 Proguard 保留 InnerClass 中的特定字段
How to keep specific fields in InnerClass using Proguard
我有一个 java class,其中有一些 public 方法,我想保留这些方法。 (这已经完成了)
我还有一个包含静态常量的 InnerClass。
class 具有以下结构。
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() { }
}
我想混淆以上内容class。我想保留一部分并删除其余部分。
我想保留方法 method1
和 method2
。我想保留内classMyInnerClass
。我想保留 MyInnerClass
的一些字段,例如 MY_CONSTANT_1
、MY_CONSTANT_2
和 MY_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;
}
这适用于顶部 class,但我的 MyInnerClass 是空的
我搜索过,但大多数人告诉我要么完全删除它,要么全部保留。
如果你们需要更多信息,请告诉我。
提前致谢
您需要使用“$”作为 class 及其内部 class 之间的分隔符,然后该规则应该可以正常工作:
-keepclassmembers class com.mypackage.MyClass$MyInnerClass {
public static <fields>;
}
我有一个 java class,其中有一些 public 方法,我想保留这些方法。 (这已经完成了) 我还有一个包含静态常量的 InnerClass。 class 具有以下结构。
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() { }
}
我想混淆以上内容class。我想保留一部分并删除其余部分。
我想保留方法 method1
和 method2
。我想保留内classMyInnerClass
。我想保留 MyInnerClass
的一些字段,例如 MY_CONSTANT_1
、MY_CONSTANT_2
和 MY_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;
}
这适用于顶部 class,但我的 MyInnerClass 是空的 我搜索过,但大多数人告诉我要么完全删除它,要么全部保留。
如果你们需要更多信息,请告诉我。 提前致谢
您需要使用“$”作为 class 及其内部 class 之间的分隔符,然后该规则应该可以正常工作:
-keepclassmembers class com.mypackage.MyClass$MyInnerClass {
public static <fields>;
}