Android应用启动崩溃:Default FirebaseApp未初始化问题修复
问题根因
这个崩溃本质是调用Firebase相关接口时,默认Firebase实例还未完成初始化,常见触发原因如下:
- 调用时序错误:在StartActivity的
onCreate里直接执行refreshTokenDevice获取Firebase实例,如果手动写的FirebaseApp.initializeApp执行时机晚于这个调用,就会直接抛错;如果应用配置了多进程,非主进程启动时不会触发Firebase默认自动初始化,也会出现这个问题。 - 配置文件异常:app模块下没有存放对应包名
com.paradigma.SIGEPedidos的google-services.json,或者文件内包名配置和实际应用包名不匹配,会导致Firebase初始化流程直接失败,哪怕手动调用初始化方法也不会生效。 - Gradle配置缺失:根目录build.gradle没配置google-services插件依赖,或者app模块build.gradle没有在文件末尾应用
com.google.gms.google-services插件,Firebase自动初始化逻辑不会注入,相关资源也不会被打包进APK。 - 依赖兼容问题:2022年后发布的新版Firebase已经废弃了
FirebaseInstanceId相关API,如果你升级依赖后还在调用旧接口,会和新版初始化逻辑产生冲突。
修复步骤
按顺序操作,每完成一步可以编译验证是否解决崩溃:
- 校验配置文件
确认google-services.json文件放在app模块根目录(和app模块build.gradle同级),打开文件检查client数组下对应条目的android_client_info -> package_name字段值,必须和应用包名com.paradigma.SIGEPedidos完全一致,不能有拼写错误、多余空格。 - 修正Gradle配置
- 打开项目根目录的build.gradle,在
buildscript -> dependencies节点下添加google-services插件依赖,版本选4.3.15以上的稳定版即可,和你当前的Android Gradle插件版本匹配:
buildscript { dependencies { classpath 'com.google.gms:google-services:4.4.0' } }
- 打开app模块的build.gradle,在文件最底部(不要放在文件头部、android节点或者dependencies节点内部)添加插件应用语句:
apply plugin: 'com.google.gms.google-services'
- 替换废弃依赖,如果你用BoM管理Firebase版本,直接移除旧的
firebase-iid依赖,换成稳定的messaging依赖:
dependencies { implementation platform('com.google.firebase:firebase-bom:32.7.0') implementation 'com.google.firebase:firebase-messaging' }
- 调整初始化与调用逻辑
删掉之前零散添加的初始化代码,按以下方式调整保证时序正确:
- 新建自定义Application类,在AndroidManifest.xml的
application节点配置android:name属性指向这个类,同时增加主进程判断避免多进程初始化异常:
class MyApp : Application() { override fun onCreate() { super.onCreate() if (FirebaseApp.getApps(this).isEmpty()) { FirebaseApp.initializeApp(this) } } }
- 替换
refreshTokenDevice里已经废弃的FirebaseInstanceId调用逻辑,用新版Firebase Messaging的API获取设备token:
private fun refreshTokenDevice() { FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> if (!task.isSuccessful) { Log.w("SIGEP", "get fcm token failed", task.exception) return@addOnCompleteListener } val deviceToken = task.result // 后续token上报逻辑 } }
- 调整
refreshTokenDevice的调用时机,不要在StartActivity的onCreate里直接调用,可以挪到onResume生命周期里触发,避免初始化还没完成就调用接口。
- 清理缓存重编译
配置修改完成后,依次执行Android Studio菜单栏的Build -> Clean Project、Build -> Rebuild Project,卸载设备上已经安装的旧版APK,重新安装运行测试。
额外排查点
如果以上操作后还是崩溃,检查两个特殊场景:
- 如果你做了启动优化把Firebase初始化放到了子线程延迟执行,必须加初始化完成的回调,等初始化结束后再执行token获取逻辑。
- 检查AndroidManifest.xml里是否给StartActivity或者Application节点配置了
android:process属性指定运行在非主进程,非主进程启动时需要单独执行Firebase初始化逻辑。
内容的提问来源于stack exchange,提问作者ModeOff
相关产品推荐
相关产品推荐

