使用Proguard的优化器后,我收到如下运行时错误:
java.lang.NullPointerException
at java.util.EnumMap.<init>(Unknown Source)
at Z.a(SourceFile:44415)
使用ReTrace时,我得到以下行导致问题:
temp = new EnumMap<anEnum, Object>(anEnum.class);
如果我反编译优化代码,我会找到以下代码:
line 44414: EnumMap localEnumMap;
line 44415:
line 44416: (localEnumMap = new EnumMap(dc.class)).put(paramdc, paramObject);
我真的不明白这是怎么回事,也不知道怎么办。如果没有运行优化程序,则不会出现错误。
答案 0 :(得分:0)
当Enum类与EnumMap或EnumSet结合使用时,将通过反射使用其T[] values()
方法来检索枚举的所有可能值。
ProGuard不会检测到这一点,并且可能会从Enum类中删除一些方法。这基本上可以在混淆或优化步骤中发生。
为了避免此错误,您可以执行以下操作:
-keepclassmembers enum xxx.yyy.MyEnum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
这样可以防止Enum类的values()
和valueOf(String)
方法被混淆或删除。