java - 类中私有字段的 NoSuchFieldError
问题描述
我面临一个问题,我的 android 代码仅在某些三星设备上抛出 NoSuchFieldError。据我了解,NoSuchFieldError 通常是由于在编译和运行时使用了不同的库版本而发生的。但是,在这种情况下,为什么私有字段会导致此错误?如果有帮助,我会使用 proguard,并且这个类是通过 dagger 注入使用的。
java.lang.NoSuchFieldError: No field mIsRegistered of type Z in class Lcom/my/package/MyClass; or its superclasses (declaration of 'Lcom/my/package/MyClass' appears in base.apk!classes11.dex)
at Lcom/my/package/MyClass.myMethod(MyClass.java:97)
at Lcom/my/package/MyClass.myMethod(MyClass1.java:36)
我的代码基本上是这样的:
public class MyClass extends BroadcastReceiver implement MyInterface {
private final Object mLock = new Object();
private volatile boolean mIsRegistered = false;
public MyClass() {
}
@Override
public void myMethod() {
synchronized (mLock) {
if (mIsRegistered) {
// do something
}
}
}
}
我的 proguard 配置类似于:
-keep class com.my.package.** {*;}
解决方案
推荐阅读
- java - 无法将 Gradle 依赖项添加到我的 Codename One 项目
- svg - 如何在 SVG 中制作曲线填充
- python - 500以下输入数的最大幂
- javascript - 如何使用 onmouseover 和 onmouseout 对多个元素应用事件处理
- android - 如何解决 app:mergeDebugResources 错误以在模拟器上运行应用程序?
- transactions - 在 NetSuite 中动态地将项目采购到事务中
- fish - 如何仅针对某些参数丰富命令?
- terminal - vscode终端不显示文件夹和分支
- python - Celery in virtualenv with supervisor
- objective-c - overriding a property causes infinite recursion