java.lang.IllegalStateException:必须在使用 singleton() 之前初始化 Fabr



我在崩溃/结构初始化中发现了故障。正如来自crashlytics的Mike在这里建议的那样:如何初始化我们应该使用的新结构:

Fabric.with(this, CrashlyticsCore.getInstance());

但是当我切换到androidX时,它开始崩溃:

必须在使用 singleton(( 之前初始化结构

我的一些主要设置是:

compileSdkVersion 29
targetSdkVersion 29
io.fabric.tools:gradle:1.28.1
gradle: 5.5.1
com.crashlytics.sdk.android:crashlytics:2.10.0@aar

在我的应用程序类中创建:

@Override
public void onCreate() {
    super.onCreate();
    Fabric.with(this, CrashlyticsCore.getInstance());
}

当然,我在清单中有元数据:

<meta-data
    android:name="io.fabric.ApiKey"
    android:value="myKey"/>

此初始化的工作方式类似于一个超级按钮,没有任何问题。

Fabric.with(this, new CrashlyticsCore(), new Crashlytics());

但我不明白为什么更新的失败了。

如果您尚未在清单文件中注册应用,请尝试以下操作:

在您的 AndroidManifest 中.xml

<application
    android:name=".MyApplication"
    ...
    />

并尝试像这样初始化:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        val core = CrashlyticsCore.Builder().disabled(false).build()
        Fabric.with(this, Crashlytics.Builder().core(core).build())
    }
}

这是我在我的项目中使用的,它工作得很好!

迈克的回答在该链接中不正确。当您使用以下初始化时

Fabric.with(this, CrashlyticsCore.getInstance());

CrashlyticsCore.getInstance()此getInstance方法正在尝试访问尚未创建的Fabric类对象。结构对象是在with方法中创建的,该方法将在执行CrashlyticsCore.getInstance()后调用

溶液:

您可以使用以下任何行进行初始化,因为它们使用 new 关键字创建所有对象

Fabric.with(this, new Crashlytics());
Fabric.with(this, new CrashlyticsCore());
Fabric.with(this, new CrashlyticsCore(), new Crashlytics())

最新更新