首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Proguard/R8反射错误: NoSuchFieldException

Android Proguard/R8反射错误: NoSuchFieldException
EN

Stack Overflow用户
提问于 2020-08-20 07:56:16
回答 1查看 202关注 0票数 0

我有一个很大的Constants类,我需要使用反射从它获取静态字符串数组。

代码语言:javascript
复制
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 "};
...

尽管遵循了网上建议的所有规则,但我无法阻止

代码语言:javascript
复制
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文件夹中也有一些文件,这些文件独立于相关项目。我试过了:

代码语言:javascript
复制
-keep class package.name.Constants

以及:

代码语言:javascript
复制
-keepclassmembers class package.name.Constants {
    public static final <fields>;
}

和:

代码语言:javascript
复制
-keepclassmembers class package.name.Constants

但似乎什么都不起作用。什么是能够访问公共静态String[]的正确方法,使用反射,打开proguard/R8,我到底应该修改哪个文件?:

代码语言:javascript
复制
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

(我相信上面的proguardFiles不再做任何事情,只是旧版本的Android /Gradle中被忽略的遗留代码?)

我还在常量文件中尝试了@Keep:

代码语言:javascript
复制
@Keep
public class Constants{
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-20 09:27:15

对于将来可能遇到此问题的其他任何人,我需要清理、重建,然后使缓存无效并重新启动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63496504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档