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

时间:2019-07-18 10:34:59

标签: android crashlytics crashlytics-android crashlytics-beta

我在crashlytics / fabric初始化中发现了故障。正如crashlytics的Mike所说:how to initialize new fabric,我们应该使用:

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

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

  

必须在使用singleton()之前初始化Fabric

我的一些主要设置是:

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

在我的Application类的onCreate中:

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

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

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

3 个答案:

答案 0 :(得分:0)

这种初始化工作就像一个魅力,没有任何问题。

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

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

答案 1 :(得分:0)

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

在您的 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())
    }
}

这就是我在我的项目中使用的,并且效果很好!

答案 2 :(得分:0)

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

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

CrashlyticsCore.getInstance(),此getInstance方法尝试访问尚未创建的Fabric类对象。 Fabric对象是通过with方法创建的,一旦执行CrashlyticsCore.getInstance()就会调用

解决方案:

您可以使用以下任意行进行初始化,因为它们正在使用 new 关键字

创建所有对象
Fabric.with(this, new Crashlytics());
Fabric.with(this, new CrashlyticsCore());
Fabric.with(this, new CrashlyticsCore(), new Crashlytics())