首页 > 解决方案 > 类中私有字段的 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.** {*;}

标签: javaandroiddagger-2dex

解决方案


推荐阅读