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

