如何解决Android Proguard / R8反射错误:NoSuchFieldException
我有一个很大的Constants类,我需要使用反射来从中获取静态String数组。
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
但似乎没有任何效果。在启用了proguard / R8的情况下,使用反射访问公用静态String []的正确方法是什么,我实际上应该确切地修改哪个文件? :
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
(我相信上面的proguardFiles不再执行任何操作,而只是旧版本的Android / Gradle中忽略的旧代码?)
我也在常量文件中尝试过@Keep:
@Keep
public class Constants{
解决方法
对于将来可能遇到此问题的其他任何人,原来我需要清理,重建,然后使缓存无效并重新启动。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。