You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用Firebase Crashlytics仪表盘无崩溃报告问题排查

问题

已为Android应用添加Firebase Crashlytics依赖,Firebase初始化正常(在Application的onCreate方法中调用FirebaseApp.initializeApp(this)),但主动抛出运行时错误后,Firebase Crashlytics仪表盘仍未显示任何崩溃报告。

已完成以下操作但无效:

  • 在build.gradle中添加所需依赖并应用Crashlytics插件
  • 配置了Crashlytics的ProGuard规则
  • 尝试调用FirebaseCrashlytics.getInstance().sendUnsentReports()强制发送日志

相关配置代码如下:

// build.gradle(:app)
plugins{
    alias(libs.plugins.android.application)
    alias(libs.plugins.jetbrains.kotlin.android)
    alias(libs.plugins.hilt)
    alias(libs.plugins.compose.compiler)
    alias(libs.plugins.firebase.crashlytics)
}
dependencies {
    implementation(libs.firebase.crashlytics)
}
// build.gradle(:project)
plugins{
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.jetbrains.kotlin.android) apply false
    alias(libs.plugins.hilt) apply false
    alias(libs.plugins.compose.compiler) apply false
    alias(libs.plugins.firebase.crashlytics) apply false
}
// libs.version.toml
[versions]
firebase-bom = "33.2.0"
firebase-crashlytics = "3.0.2"

[libraries]
firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebase-bom" }
firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics" }
firebase-messaging-ktx = { group = "com.google.firebase", name = "firebase-messaging" }
firebase-crashlytics = {group = "com.google.firebase" , name="firebase-crashlytics"}

[plugins]
android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt-android" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
firebase-crashlytics = {id = "com.google.firebase.crashlytics" , version.ref = "firebase-crashlytics"}
// MyApplication.kt
@HiltAndroidApp
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Timber.plant(Timber.DebugTree())

        KakaoSdk.init(this, getString(R.string.kakao_share_app_key))
        FirebaseApp.initializeApp(this)

        Thread.setDefaultUncaughtExceptionHandler { _, throwable ->
            Toast.makeText(this,"Error", Toast.LENGTH_SHORT).show()

          // dashboard is not showing !
            Firebase.crashlytics.recordException(throwable)  
            FirebaseCrashlytics.getInstance().log("APP CRASHED MANUALLY")
            FirebaseCrashlytics.getInstance().sendUnsentReports()
        }
    }
}

预期结果:Firebase Crashlytics仪表盘能正常显示崩溃报告。


可能原因及解决方案

1. 自定义异常处理器覆盖了Crashlytics默认逻辑

你设置的Thread.setDefaultUncaughtExceptionHandler会替换掉Crashlytics自动注册的异常处理器,导致Crashlytics无法完成完整的崩溃上报流程。
解决方法:
保存并调用原生默认处理器,确保Crashlytics的流程被执行:

@HiltAndroidApp
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Timber.plant(Timber.DebugTree())

        KakaoSdk.init(this, getString(R.string.kakao_share_app_key))
        FirebaseApp.initializeApp(this)

        // 保存Crashlytics注册的默认异常处理器
        val defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
        
        Thread.setDefaultUncaughtExceptionHandler { _, throwable ->
            Toast.makeText(this,"Error", Toast.LENGTH_SHORT).show()

            Firebase.crashlytics.recordException(throwable)  
            FirebaseCrashlytics.getInstance().log("APP CRASHED MANUALLY")
            
            // 调用原生处理器,让Crashlytics完成上报
            defaultHandler?.uncaughtException(Thread.currentThread(), throwable)
        }
    }
}

2. 依赖版本冲突(未正确使用Firebase BOM)

你同时指定了firebase-crashlytics的独立版本和BOM版本,可能导致版本不兼容,引发功能异常。
解决方法:
移除独立版本定义,完全通过BOM管理Firebase依赖版本:

// libs.version.toml
[versions]
firebase-bom = "33.2.0"
# 移除该行:firebase-crashlytics = "3.0.2"

[libraries]
firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebase-bom" }
# 修改Crashlytics依赖,由BOM管理版本
firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" }

同时在app模块的build.gradle中先引入BOM:

dependencies {
    implementation platform(libs.firebase.bom)
    implementation(libs.firebase.crashlytics)
}

3. Debug模式下Crashlytics被禁用

默认Debug构建可能会关闭Crashlytics的上报功能,或限制报告频率。
解决方法:
在app的build.gradle中明确开启Debug模式的Crashlytics:

android {
    buildTypes {
        debug {
            firebaseCrashlytics {
                mappingFileUploadEnabled true
                nativeSymbolUploadEnabled true
            }
        }
    }
}

4. 报告延迟或网络问题

Crashlytics报告并非实时同步,离线状态下会缓存到本地,待联网后发送,最长可能需要24小时(通常几分钟内)才能在仪表盘显示。
解决方法:

  • 确保设备联网,重启应用后等待5-10分钟
  • 卸载重装应用,触发新崩溃后再检查仪表盘

5. Firebase项目配置不匹配

应用包名、google-services.json文件与Firebase控制台配置不一致,会导致上报失败。
解决方法:

  • 检查Firebase控制台中注册的应用包名,与本地build.gradle的applicationId完全一致
  • 确认google-services.json是从Firebase控制台对应应用下载,并放置在app模块根目录下

内容的提问来源于stack exchange,提问作者jeong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:00:15