java - 如何使用 Proguard 保留 InnerClass 中的特定字段

标签 java proguard

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

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() {    }
}

我想混淆上面的类。我想保留一些部分并删除其余部分。 我想保留方法 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;
}

这适用于顶级类(class),但我的 MyInnerClass 为空 我进行了搜索,但大多数人都告诉我要么完全删除它,要么保留全部。

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

最佳答案

您需要使用“$”作为类与其内部类之间的分隔符,然后规则应该正确工作:

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

关于java - 如何使用 Proguard 保留 InnerClass 中的特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343043/

相关文章:

android - 如何让 runProguard 为 android-library Gradle 插件工作?

android - 如何减少 apk 中的 GMS 大小

java - Java中如何在公共(public)方法中声明私有(private)方法?

java - 如何在 JavaFx 中创建打开另一个窗口的按钮,无需 GUI 构建器、FXML、swing 或 awt?

java - 如何定义JPA?

android - 当minifyEnabled为true时,版本发布错误:org.gradle.initialization.ReportedException:org.gradle.internal.exceptions.LocationAwareException:

java - 内部接口(interface)的 Proguard 配置

java - 有没有办法使用java列出ssis中的包

java - 如何通过Spring注解配置实现模板方法模式?

android - 运行应用程序时启用 proguard 崩溃(未找到类 "androidx.core.app.CoreComponentFactory")