Proguard 错误 - EnumTypeInt 中的 NoSuchMethodException
Proguard Error- NoSuchMethodException in EnumTypeInt
我有一个名为 EnumInt 的接口并按如下方式使用它
case EnumInt:
@SuppressWarnings("unchecked")
Class<? extends EnumInt> enumType = (Class<? extends EnumInt>) field.getType();
Method enumStaticMethod = enumType.getMethod("fromVal", int.class);
Object enumInstance = enumStaticMethod.invoke(null, object);
field.setAccessible(true);
field.set(entity, enumInstance);
break;
我已经将整个包裹保存在 progaurd 中,但仍然收到
-keep class abc.cde.** { *; } // package having EnumInt interface and other files
java.lang.NoSuchMethodException: fromVal [int]
at java.lang.Class.getMethod(Class.java:2068)
at java.lang.Class.getMethod(Class.java:1690)
我已尝试保留 EnumInt 接口、所有本机方法、proguard 中的字段以防止混淆,但仍然无法消除错误。
请注意没有proguard它工作正常。
请帮忙。提前致谢。问题特定于枚举。
为未来的读者回答我自己的问题。
我正在使用另一个实现 EnumInt 的枚举,如下所示
public static enum CustomeType implements EnumInt {
ALL(MSG_TYPE_ALL),
IN(MSG_TYPE_IN),
OUT(MSG_TYPE_OUT),
int val;
private CustomeType(int val) {
this.val = val;
}
public static CustomeType fromVal(int val) {
for (CustomeType messageType : values()) {
if (messageType.val == val) {
return messageType;
}
}
return null;
}
}
而且我错过了 proguard 混淆来防止这个枚举。
解决方案
proguard 中的行下方
-keep public enum abc.cde.a.CustomeType$** {
**[] $VALUES;
public *;
}
我有一个名为 EnumInt 的接口并按如下方式使用它
case EnumInt:
@SuppressWarnings("unchecked")
Class<? extends EnumInt> enumType = (Class<? extends EnumInt>) field.getType();
Method enumStaticMethod = enumType.getMethod("fromVal", int.class);
Object enumInstance = enumStaticMethod.invoke(null, object);
field.setAccessible(true);
field.set(entity, enumInstance);
break;
我已经将整个包裹保存在 progaurd 中,但仍然收到
-keep class abc.cde.** { *; } // package having EnumInt interface and other files
java.lang.NoSuchMethodException: fromVal [int]
at java.lang.Class.getMethod(Class.java:2068)
at java.lang.Class.getMethod(Class.java:1690)
我已尝试保留 EnumInt 接口、所有本机方法、proguard 中的字段以防止混淆,但仍然无法消除错误。 请注意没有proguard它工作正常。 请帮忙。提前致谢。问题特定于枚举。
为未来的读者回答我自己的问题。 我正在使用另一个实现 EnumInt 的枚举,如下所示
public static enum CustomeType implements EnumInt {
ALL(MSG_TYPE_ALL),
IN(MSG_TYPE_IN),
OUT(MSG_TYPE_OUT),
int val;
private CustomeType(int val) {
this.val = val;
}
public static CustomeType fromVal(int val) {
for (CustomeType messageType : values()) {
if (messageType.val == val) {
return messageType;
}
}
return null;
}
}
而且我错过了 proguard 混淆来防止这个枚举。
解决方案
proguard 中的行下方
-keep public enum abc.cde.a.CustomeType$** {
**[] $VALUES;
public *;
}