我根据Get started with Firebase Crashlytics为我的Android应用设置了Firebase Crashlytics(使用Android studio 3.1.3)。在我自己的设备和模拟器上,一切正常,我的崩溃在Firebase控制台中正确显示。到目前为止一切都很好。
但是,我的某个应用用户发生了意外情况:
java.lang.IllegalStateException:在使用singleton()
之前必须初始化Fabric
异常是在另一个Activity中抛出而不是MainActivity。
我知道您可以通过调用Fabric.with(this, new Crashlytics());
手动执行here所述的初始化。但是,没有任何关于必须在上面提到的入门文章中手动初始化Crashlytics的说法。我期待这是自动完成的,因为我自己的所有测试运行良好。那么为什么对于某些用户来说,Crashlytics是正确设置的,对于某些用户来说没有?
答案 0 :(得分:15)
您需要在应用程序的onCreate
中初始化Crashlyticsimport 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());
}
}
答案 1 :(得分:3)
就我而言,以下检查有助于消除错误。
如果您在清单中找到以下代码,请将其设置为true或将其删除,因为默认情况下为true。
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
如果从您的 build.gradle 中提取了 value ,请检查其中的 buildType 并考虑不调用任何Crashlytics buildType 下的功能。
示例: build.gradle
android{
...
buildTypes {
debug{
manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
manifestPlaceholders = [enableCrashReporting:"true"]
}
}
}
在这种情况下,您应该像这样包装您的Crashlytics调用-
if(!BuildConfig.DEBUG){
...
Crashlytics.setUserIdentifier(...)
...
}
答案 2 :(得分:2)
使用Firebase Crashlytics时,无需进行任何Fabric初始化。一切都是自动完成的。
但是,如果您要通过(例如)Crashlytics.log("Custom log")
进行任何自定义日志记录,则需要在清单中启用FirebaseCrashlytics。如果您有类似清单,请检查清单:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${crashlyticsEnabled}" />
可以将 ${crashlyticsEnabled}
设置为true
或false
或通过您的应用程序级别 build.gradle 。在调试应用程序时,通常用于禁用Firebase Crashlytics。
答案 3 :(得分:1)
如果您使用android:process
,则自动初始化将不起作用,因为它可以通过在清单中使用内容提供程序来实现。在这种情况下,您必须manually initialize Crashlytics。
答案 4 :(得分:1)
如果您从Fabric.io迁移到Firebase,则必须从 AndroidManifest.xml
中删除某些行 <!-- Fabric.io Analytics key -->
<meta-data
android:name="io.fabric.ApiKey"
android:value="49yy995568140ee22uio128e00450bd99603fd43" />
使用这些行,Firebase无法正确初始化Crashlytics插件。
答案 5 :(得分:1)
从Fabric迁移到FirebaseCrashlytics时,出现此异常。 我没有删除
// Remove the Fabric Crashlytics SDK.
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
我没有更新代码:
Crachlytics.log(..
应该成为
FirebaseCrashlytics.getInstance().log(...
实际上只是遵循本文档中的所有内容 Upgrade to the Firebase Crashlytics SDK
答案 6 :(得分:0)
这个错误使我在Ionic 4版本上胜出。我已经安装了Cordova firebaseX模块,并且发生了此错误。
通过阅读调试日志,我设法看到firebase crashlytics集合缺少布尔值。 在androidmanifest中,我找到了这一行,只是将值更改为bool以进行热修复。我输入'true'-错误消失了。
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="$FIREBASE_CRASHLYTICS_COLLECTION_ENABLED"/>
因此,对于任何人,在Ionic平台上都会出现此错误。在androidmanifest文件中查找上述meta行。
答案 7 :(得分:0)
对于使用NDK且存在相同问题的任何人。 在从官方文档完成此步骤之前 //添加Crashlytics NDK依赖项(如果您有 // Firebase Crashlytics依赖项,将其替换)。 使用原始依赖项对其进行初始化。