为什么Fabric没有初始化?java.lang.IllegalStateException:在使用singleton()之前必须初始化Fabric

Joh*_*ood 32 android firebase crashlytics

我为我的Android应用程序(使用Android studio 3.1.3)开始使用Firebase Crashlytics设置了Firebase Crashlytics .在我自己的设备和模拟器上,一切正常,我的崩溃在Firebase控制台中正确显示.到现在为止还挺好.

但是,我的一个应用用户发生了意外情况:

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

异常被抛出在另一个Activity中,而不是MainActivity.

我知道您可以通过调用手动执行此处所述的初始化.Fabric.with(this, new Crashlytics());但是,没有任何关于必须在上面提到的入门文章中手动初始化Crashlytics的说法.我期待这是自动完成的,因为我自己的所有测试运行良好.那么为什么对于一些用户来说Crashlytics设置正确而有些用户没有?

Gil*_*eig 29

您需要在应用程序的onCreate中初始化Crashlytics

import android.app.Application;

import com.crashlytics.android.Crashlytics;

import io.fabric.sdk.android.Fabric;

public class TestApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的回答。正如我所描述的,我知道我可以提出你的建议。但是,我认为它将自动设置,因为在我自己的设备上一切正常。此外,官方文档对此也没有任何说明。我只是想知道*为什么*某些设备需要手动设置,而有些则不需要? (2认同)

Jis*_*Dev 8

就我而言,以下检查有助于消除错误。

如果您在清单中找到以下代码,请将其设置为true或将其删除,因为默认情况下为true。

   <meta-data
      android:name="firebase_crashlytics_collection_enabled"
      android:value="false" /> 
Run Code Online (Sandbox Code Playgroud)

此外柜面如果是被拉从您的build.gradle,检查其buildType其并根据该考虑不调用任何Crashlytics功能buildType

示例: build.gradle

android{

    ...

   buildTypes {
        debug{
            manifestPlaceholders = [enableCrashReporting:"false"]
        }
        release {
            manifestPlaceholders = [enableCrashReporting:"true"]
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您应该将Crashlytics调用包装如下:

if(!BuildConfig.DEBUG){
   ...
   Crashlytics.setUserIdentifier(...)
   ...
}
Run Code Online (Sandbox Code Playgroud)


小智 5

如果你从 Fabric.io 迁移到 Firebase,肯定有一些行你需要从AndroidManifest.xml 中删除

        <!-- Fabric.io Analytics key -->
        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="49yy995568140ee22uio128e00450bd99603fd43" />
Run Code Online (Sandbox Code Playgroud)

使用这些行,Firebase 无法正确初始化 Crashlytics 插件。