Flutter报Firebase初始化MissingPluginException错误如何解决
Flutter Firebase初始化MissingPluginException问题排查方案
问题报错日志
Performing hot restart... Syncing files to device sdk gphone64 x86 64... Restarted application in 1,035ms. E/flutter ( 6967): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: MissingPluginException(No implementation found for method Firebase#initializeCore on channel plugins.flutter.io/firebase_core) E/flutter ( 6967): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:165:7) E/flutter ( 6967): <asynchronous suspension> E/flutter ( 6967): #1 MethodChannel.invokeListMethod (package:flutter/src/services/platform_channel.dart:353:35) E/flutter ( 6967): <asynchronous suspension> E/flutter ( 6967): #2 MethodChannelFirebase._initializeCore (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:31:23) E/flutter ( 6967): <asynchronous suspension> E/flutter ( 6967): #3 MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:73:7) E/flutter ( 6967): <asynchronous suspension> E/flutter ( 6967): #4 Firebase.initializeApp (package:firebase_core/src/firebase.dart:40:31) E/flutter ( 6967): <asynchronous suspension> E/flutter ( 6967): #5 main (package:firebase_test/main.dart:20:3) E/flutter ( 6967): <asynchronous suspension>
已确认的前置信息
- 采用官方标准写法初始化Firebase,代码如下:
WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );
- 触发场景:修改pubspec.yaml中应用图标、启动页资源配置后突发问题,回退原有图片资源后故障未消失
- 已尝试的无效操作:
- 热重启、重启应用、重启Android Studio、重启模拟器
- 调整app层级build.gradle的release构建配置,先后修改过代码混淆开关、资源压缩开关、签名配置
- 执行
flutter doctor、flutter doctor -v未检测到环境异常 - 初步怀疑故障与firebase_core 1.19.0版本有关
排查解决步骤(按优先级从高到低执行)
- 优先执行全量清理构建:Firebase属于带原生实现的插件,原生侧注册逻辑仅在应用冷启动全量构建时加载,热重载、热重启不会重新链接原生插件,修改pubspec配置、原生配置、资源后必须执行以下命令:
# 清理所有历史构建缓存 flutter clean # 重新拉取依赖 flutter pub get # 先手动杀掉模拟器/真机上正在运行的旧应用进程,再执行全量构建启动 flutter run
- 核对Android端包名一致性:修改应用图标、启动页的第三方脚本可能自动篡改Android配置,需确认以下4个位置的包名完全匹配:
android/app/src/main/AndroidManifest.xml中manifest根节点的package属性值android/app/build.gradle中defaultConfig节点下的applicationId值android/app/src/main/kotlin(或java)/对应包名目录/MainActivity文件内的包名声明- 项目根目录下
google-services.json中client[0].client_info.android_client_info.package_name字段值
- 检查Firebase原生插件配置完整性:修改构建配置时容易误删Google服务插件引用,需核对两处配置:
- 项目根目录下
android/build.gradle的buildscript依赖中存在Google服务插件:
buildscript { dependencies { // 版本号可根据官方兼容表调整,必须存在该依赖 classpath 'com.google.gms:google-services:4.3.13' } }- app层级
android/app/build.gradle文件最末尾存在插件应用配置(该配置不能放在文件头部):
apply plugin: 'com.google.gms.google-services' - 项目根目录下
- 规避已知问题版本:若上述操作无效,先在pubspec.yaml中锁定firebase_core版本,避开1.19.0版本的已知原生注册bug:
dependencies: flutter: sdk: flutter firebase_core: 1.18.0
修改后重新执行全量清理构建流程即可。
- Android 12+兼容适配:若使用Android 12及以上版本的模拟器/真机,需确认
AndroidManifest.xml中所有Firebase相关组件都配置了android:exported="true"属性,同时application节点下存在Flutter嵌入配置:
<meta-data android:name="flutterEmbedding" android:value="2" />
内容的提问来源于stack exchange,提问作者Feynman's Plotter
相关产品推荐
相关产品推荐

