首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止ProGuard分隔内部枚举

如何防止ProGuard分隔内部枚举
EN

Stack Overflow用户
提问于 2017-07-06 03:43:04
回答 2查看 1.2K关注 0票数 0

我正在尝试ProGuard一个包含内部枚举(MyInnerEnum)的面向公众的类(MyClass)文件。然而,在ProGuarding之后,内部枚举被分离到它自己的类文件MyClass$MyInnerEnum中。如何防止ProGuard分离内部枚举?我需要能够使用点符号来访问内部枚举,比如MyClass.MyInnerEnum.ENUM_VALUE,而不是像MyClass$MyInnerEnum.ENUM_VALUE那样使用美元符号。

我的面向公众的类:

代码语言:javascript
运行
复制
package com.myclass;

public interface MyClass {
    enum MyInnerEnum {
        ENUM_VALUE
    }
}

我已经尝试了这些ProGuard配置选项,但都没有用:

代码语言:javascript
运行
复制
<option>-keep enum com.myclass.MyClass** { *; }</option>
<option>-keep enum com.myclass.MyClass$* { *; }</option>
<option>-keep enum com.myclass.MyClass$MyInnerEnum { *; }</option>
EN

回答 2

Stack Overflow用户

发布于 2018-04-19 23:01:08

您可以通过保留外部类(在本例中为接口)和内部枚举来尝试一下。通过将以下行添加到您的proguard配置中,这应该会起作用:

代码语言:javascript
运行
复制
-keep interface com.myclass.MyClass
-keep enum com.myclass.MyClass$MyInnerEnum
票数 0
EN

Stack Overflow用户

发布于 2018-12-17 15:42:19

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

代码语言:javascript
运行
复制
# 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44934718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档