Flutter release模式运行触发Cloud Firestore致命异常问题求助
问题根因
报错核心为Cloud Firestore无法获取离线持久化数据库的独占锁,仅在Release模式触发的常见原因包括:
- 多进程场景下重复初始化Firestore
- Release代码混淆导致Firestore类逻辑异常
- 开发版Flutter与Firebase插件版本不兼容
- 本地旧版本缓存的数据库文件锁状态异常
解决方案
排查多进程初始化逻辑
如果你的应用使用了后台服务、推送等多进程能力,不要在自定义Application类的onCreate方法中初始化Firebase和Firestore,多进程场景下Application代码会在所有进程中重复执行,导致多个进程同时抢占数据库锁。需要增加进程判断逻辑,仅在主进程中初始化Firestore。调整Firestore持久化配置
可以先显式关闭离线持久化验证问题,在初始化Firestore时添加如下代码:
FirebaseFirestore.instance.settings = const Settings( persistenceEnabled: false );
如果需要保留离线持久化能力,确保全局仅在主进程的唯一一处设置该参数,不要在异步回调中重复执行初始化逻辑。
- 添加Firestore混淆规则
在android/app/proguard-rules.pro文件中添加如下规则,避免Release模式代码混淆导致的异常:
-keep class com.google.firebase.firestore.** { *; } -keep class io.flutter.plugins.firebase.firestore.** { *; }
切换稳定版依赖
你当前使用的是master分支的开发预览版Flutter,稳定性较差,建议切换到2.2.x的stable分支,同时将cloud_firestore、firebase_core等Firebase插件升级到对应兼容的稳定版本,执行flutter clean清理缓存后重新打包。清理旧版本缓存
先完全卸载测试设备上已安装的同包名应用,再安装新生成的Release包,排除旧Debug版本残留的数据库文件锁异常导致的问题。
内容的提问来源于stack exchange,提问作者Muhtar
相关产品推荐
相关产品推荐

