gpt4 book ai didi

java - Android 上的 ProGuard + 反射 = NoSuchFieldException

转载 作者:行者123 更新时间:2023-12-01 02:06:08 73 4
gpt4 key购买 nike

我叫 Matthew,在使用 ProGuard 后,我在 Android 上遇到了一些问题。

我在 libgdx 中编写游戏,我需要动态获取字符串,我有这样的东西:

package com.PACKAGE;

public class CLASS extends ANOTHER_CLASS{

(...)

private static void load(String fieldName) {
Field field;
String fileName;
try {
field = SOME_CLASS.class.getField(fieldName);
fileName = (String) field.get(null);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
throw new RuntimeException(e);
}

SOME_CLASS.SOME_METHOD.load(fileName);

}

(...)

private STH get(String fieldName) {
Field field;
String fileName;
try {
field = SOME_CLASS.class.getField(fieldName);
fileName = (String) field.get(null);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
throw new RuntimeException(e);
}

return SOME_CLASS.SOME_METHOD.get(fileName);

}

(...)

}

在我导出发布 apk(编译正常)并运行游戏后,我得到 NoSuchFieldException:

java.lang.RuntimeException: java.lang.NoSuchFieldException: FIELD_NAME

我需要在 proguard-project.txt 中添加什么来处理这个问题?这不起作用,我不知道该怎么做。

-keepclassmembers class com.PACKAGE.CLASS { 
String fileName;
}

类看起来像:

package com.ANOTHER_PACKAGE;
public class SOME_CLASS {
public static final String fieldName1 = "string I want";
public static final String fieldName2 = "string I want";
public static final String fieldName3 = "string I want";
}

更新:

感谢@Selvin,答案是

-keepclassmembers class ANOTHER_PACKAGE.SOME_CLASS { 
public static final <fields>;
}

project-proguard.txt 中。现在它完美地工作了:)

最佳答案

在你的 proguard.cnf 文件中试试这个

-keep public class * extends com.yoursite.android.yourappname.YourClassName

-keepclassmembers class * extends com.yoursite.android.yourappname.YourClassName{
public <init>(android.content.Context);
}

引用:Proguard and reflection in Android

关于java - Android 上的 ProGuard + 反射 = NoSuchFieldException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26994708/

73 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com