Flutter中如何为特定flavor排除Firebase配置
Flutter Mock Flavor 排除Firebase配置方案
Android 端配置
1. 模块级 build.gradle 插件按需应用
修改 android/app/build.gradle,移除全局的 apply plugin: 'com.google.gms.google-services',改为仅对非 mock 变体应用插件:
android { flavorDimensions "environment" productFlavors { mock { dimension "environment" // 你的 mock 环境配置 } dev { dimension "environment" // 你的 dev 环境配置 } uat { dimension "environment" // 你的 uat 环境配置 } prod { dimension "environment" // 你的 prod 环境配置 } } // 仅为非 mock 变体应用 Google Services 插件 applicationVariants.all { variant -> if (variant.flavorName != "mock") { variant.variantData.scope.plugins.apply("com.google.gms.google-services") } } }
2. Firebase 依赖按 flavor 拆分
将 Firebase 相关依赖仅添加到非 mock flavor,避免 mock 环境引入不必要的依赖:
dependencies { // 公共依赖 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "flutter:flutter_embedding_debug" // 仅非 mock flavor 引入 Firebase 依赖 devImplementation 'com.google.firebase:firebase-analytics:21.5.0' uatImplementation 'com.google.firebase:firebase-analytics:21.5.0' prodImplementation 'com.google.firebase:firebase-analytics:21.5.0' // 其他 Firebase 组件(如 Auth、Firestore)同理拆分 }
3. 配置文件存放
将 google-services.json 分别放入对应 flavor 的目录:
app/src/dev/google-services.jsonapp/src/uat/google-services.jsonapp/src/prod/google-services.json
mock 目录下无需放置该文件。
iOS 端配置
1. Podfile 按需引入 Firebase
修改 ios/Podfile,仅为非 mock 的 target 添加 Firebase 依赖:
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'Runner' do use_frameworks! use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end # 为 Dev、Uat、Prod target 添加 Firebase 依赖 ['RunnerDev', 'RunnerUat', 'RunnerProd'].each do |target_name| target target_name do use_frameworks! use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) pod 'Firebase/Analytics' # 其他 Firebase 组件(如 Auth、Firestore)按需添加 end end
2. GoogleService-Info.plist 管理
将各环境的 GoogleService-Info.plist 放入对应目录(如 ios/Runner/Dev/GoogleService-Info.plist),然后在 Xcode 中:
- 打开 Runner 项目,选中对应非 mock target(如 RunnerDev)
- 进入 Build Phases > Copy Bundle Resources,添加对应环境的
GoogleService-Info.plist - 确保 RunnerMock target 中不包含该文件
3. Flutter 代码层面控制初始化
在 Flutter 入口代码中,根据当前 flavor 决定是否初始化 Firebase:
import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 通过 dart-define 传递 flavor 参数 const flavor = String.fromEnvironment('FLAVOR'); if (flavor != 'mock') { await Firebase.initializeApp(); } runApp(const MyApp()); }
运行 mock flavor 时传递参数:
flutter run --flavor mock --dart-define=FLAVOR=mock
内容的提问来源于stack exchange,提问作者GullTee
相关产品推荐
相关产品推荐

