如何防止ProGuard分离内部枚举

时间:2017-07-05 19:43:04

标签: java enums proguard inner-classes android-proguard

我正在尝试ProGuard一个包含内部枚举($('#searchbox').val("father").trigger('keyup'))的面向公众的类(MyClass)文件。但是,在ProGuarding之后,内部枚举被分离为自己的类文件MyInnerEnum。如何防止ProGuard分离内部枚举?我需要能够使用点符号访问内部枚举,例如MyClass$MyInnerEnum并且不使用MyClass.MyInnerEnum.ENUM_VALUE之类的美元符号。

我面向公众的课程:

MyClass$MyInnerEnum.ENUM_VALUE

我尝试过这些ProGuard配置选项无济于事:

package com.myclass;

public interface MyClass {
    enum MyInnerEnum {
        ENUM_VALUE
    }
}

2 个答案:

答案 0 :(得分:0)

您可以通过保留外部类(在您的案例界面中)和内部枚举来尝试。通过在proguard配置中添加以下行,这应该可以工作:

-keep interface com.myclass.MyClass
-keep enum com.myclass.MyClass$MyInnerEnum

答案 1 :(得分:0)

我遇到同样的问题。我通过添加以下内容来解决它:

# don't proguard all inner enum, need to cooperate with "-keep enum com.companyname.abcd.ClassName$EnumName"
-keepattributes InnerClasses
...
-keep enum com.myclass.MyClass$MyInnerEnum