我有一个很大的Constants类,我需要使用反射从它获取静态字符串数组。
public class Constants {
public static String OneAIntro = "Guten Morgen – Auf dich warten einige Fragen";
public static String[] OneAStepOne = {"Wie würdest du deinen Schlaf beurteilen?", "Sehr schlecht","Sehr gut", "Konntest du in der letzten Nacht gut einschlafen, durchschlafen und bist zur gewünschten Zeit aufgewacht?"};
public static String[] OneAStepTwo = {"Im Moment fühle ich mich ...", "zufrieden", "unzufrieden "};
...尽管遵循了网上建议的所有规则,但我无法阻止
java.lang.NoSuchFieldException: OneAStepOne让我困惑的一件事是把规则放在正确的地方。在Android Studio下有一个名为proguard-rules.pro的文件,在中间构建目录/proguard- files / proguard-android.txt-4.01、proguard android-optiize.txt-4.01和proguard-defaults.txt-4.01中也有文件。
在Android SDK文件夹中也有一些文件,这些文件独立于相关项目。我试过了:
-keep class package.name.Constants以及:
-keepclassmembers class package.name.Constants {
public static final <fields>;
}和:
-keepclassmembers class package.name.Constants但似乎什么都不起作用。什么是能够访问公共静态String[]的正确方法,使用反射,打开proguard/R8,我到底应该修改哪个文件?:
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'(我相信上面的proguardFiles不再做任何事情,只是旧版本的Android /Gradle中被忽略的遗留代码?)
我还在常量文件中尝试了@Keep:
@Keep
public class Constants{发布于 2020-08-20 09:27:15
对于将来可能遇到此问题的其他任何人,我需要清理、重建,然后使缓存无效并重新启动。
https://stackoverflow.com/questions/63496504
复制相似问题