Android Proguard/R8 reflection error: NoSuchFieldException
Android Proguard/R8 reflection error: NoSuchFieldException
我有一个很大的常量 Class,我需要使用反射从中获取静态字符串数组。
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
但似乎没有任何效果。能够访问 public static String[] 的正确方法是什么,使用反射,打开 proguard/R8,我应该修改哪个文件? :
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
(我相信上面的 proguardFiles 不再做任何事情,只是旧版本 Android / Gradle 忽略的遗留代码?)
我也试过常量文件中的@Keep:
@Keep
public class Constants{
对于将来可能遇到此问题的任何其他人,事实证明我需要清理、重建,然后使缓存无效并重新启动。
我有一个很大的常量 Class,我需要使用反射从中获取静态字符串数组。
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
但似乎没有任何效果。能够访问 public static String[] 的正确方法是什么,使用反射,打开 proguard/R8,我应该修改哪个文件? :
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
(我相信上面的 proguardFiles 不再做任何事情,只是旧版本 Android / Gradle 忽略的遗留代码?)
我也试过常量文件中的@Keep:
@Keep
public class Constants{
对于将来可能遇到此问题的任何其他人,事实证明我需要清理、重建,然后使缓存无效并重新启动。