2016-09-06 77 views
0

我有一个java类,它有一些公用方法,我想保留它。 (这已经完成) 我也有一个包含静态常量的InnerClass。 该班有以下结构。如何使用Proguard在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_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; 
} 

这正确适用于顶级,但我MyInnerClass是空 我搜查,但他们大多告诉要么完全删除或保留所有。

如果你们需要更多信息,请告诉我。 在此先感谢

回答

1

你需要使用“$”作为分隔符类及其内部类之间,那么该规则应能正常工作:

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

确定..会尝试, – Arunkumar

+0

这工作..这太傻了。谢谢 – Arunkumar

相关问题