Flutter同时引入Cloud Firestore与agora rtc engine后release模式Firestore异常
问题诱因
- Android端混淆/压缩规则冲突:Release模式默认开启R8混淆与资源压缩,若未单独配置Firebase相关类的保留规则,Agora的默认混淆规则可能误裁剪Firestore gRPC通信、Google Play服务相关的核心类,导致网络请求无法正常初始化
- 底层网络栈版本冲突:Agora RTC与Cloud Firestore均依赖OkHttp、Okio这类通用网络底层库,Release构建时依赖仲裁拉取的版本不兼容其中一方的网络调用逻辑,Debug模式下的依赖校验逻辑更宽松所以不会触发问题
- Agora网络策略劫持:Agora RTC为保障音视频传输稳定性,Release模式下默认开启私有网络传输优化策略,可能误拦截Firestore使用的gRPC长连接请求,表现为无网络报错
解决方案
通用配置
- 优先升级
cloud_firestore到4.0+稳定版,agora_rtc_engine到6.0+稳定版,避免历史版本存在的已知依赖冲突 - 初始化Agora RTC时关闭不必要的私有网络优化,避免拦截第三方网络请求
final rtcEngine = await createAgoraRtcEngine(); await rtcEngine.initialize(RtcEngineContext( appId: "你的Agora AppId", channelProfile: ChannelProfileType.channelProfileCommunication, areaCode: AreaCode.areaCodeCn, // 按需指定业务区域,避免全局网络探测 )); await rtcEngine.setParameters("{\"engine.enable_agora_private_ip\": false}");
Android端适配
- 在
android/app/proguard-rules.pro中添加Firebase与Firestore的保留规则,避免被混淆裁剪:
# 保留Firebase所有核心类 -keep class com.google.firebase.** { *; } -keep class com.google.android.gms.** { *; } # 保留Firestore gRPC通信相关类 -keep class io.grpc.** { *; } -keepclassmembers class io.grpc.** { *; }
- 在
android/build.gradle的allprojects块中强制指定统一的OkHttp版本,避免版本冲突:
allprojects { repositories { // 原有仓库配置保持不变 } configurations.all { resolutionStrategy { force 'com.squareup.okhttp3:okhttp:4.10.0' force 'com.squareup.okio:okio:3.2.0' } } }
- 若开启了资源压缩,在
android/app/build.gradle的release构建配置中添加Firebase配置文件白名单:
android { // 其余配置保持不变 buildTypes { release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
iOS端适配
- 在
ios/Podfile中添加gRPC配置,避免和Firestore依赖的gRPC版本冲突:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'GRPC_NO_BORINGSSL=1'] end end end
- 在Xcode的Release构建设置中,将
Strip Debug Symbols During Copy设置为NO,避免裁剪Firebase依赖的核心符号表
内容的提问来源于stack exchange,提问作者Elaj App
相关产品推荐
相关产品推荐

