【问题标题】:Crashlytics.logException method throwing illegal state exception. Not able to collect non-fatal issues for some activitiesCrashlytics.logException 方法抛出非法状态异常。无法收集某些活动的非致命问题
【发布时间】:2019-04-09 17:14:24
【问题描述】:

我的应用使用了上述 Firebase Crashlytics 功能,但我遇到了一个奇怪的问题。最近我在我的应用程序的 Playstore 崩溃中看到了一个异常(见附图)。 该位置对应的代码如下:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my_sites)
        setSupportActionBar(findViewById(R.id.my_toolbar))

        init()
        try{
            loadSitesSetAdapter()
        } catch (e:NullPointerException){
            Crashlytics.logException(e) // this is line 55 as crash
            finish()
//            startActivity(Intent(this,MainActivity::class.java))
        }

我的应用中的 Fabric 初始化如下:

在应用程序级别的 gradle 中我有:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        // Disable fabric build ID generation for debug builds
        ext.enableCrashlytics = false
    }
}

在主要活动中,我有以下内容:

val crashlyticsKit = Crashlytics.Builder()
                                    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
                                    .build();

    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(this,crashlyticsKit)

最后但并非最不重要的一点是我在 gradle 文件中的依赖关系如下:

// Crashlytics
implementation('com.crashlytics.sdk.android:crashlytics:2.9.8@aar') {
    transitive = true;
}

我在这里有什么明显的遗漏吗?请帮忙

【问题讨论】:

    标签: android crashlytics twitter-fabric crashlytics-android


    【解决方案1】:

    Fabric 必须先初始化,然后才能在应用中使用。您在哪里调用Crashlytics.logException(e),是在Fabric.with(this,crashlyticsKit) 行之前完成的吗?如果没有,则必须先初始化 Fabric,然后才能使用它的任何方法。

    如果您要在多个活动/屏幕中调用 Fabric 方法,那么最好有一个可以初始化 Fabric 的 Application 子类。

    请参阅此处的入门段落: https://docs.fabric.io/android/fabric/overview.html#manual-setup

    【讨论】:

    • 谢谢。我只在主要活动中这样做。我不知道每项活动都需要这样做。
    • 是的,如果你想在多个活动中使用它,只需创建一个 Application 子类并在该类的 onCreate 方法中初始化它。
    • 这是令人困惑的地方:我正在查看此页面:firebase.google.com/docs/crashlytics/… 在第 2 点上显示“在您的任何一项活动中”
    • 如果您只希望它用于一项活动,那很好。但是对于多个屏幕,您应该将其放在 Application 子类中。如果没有,那么您只需为每个要使用它的 Activity 将它放在 onCreate 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多