如何在Flutter中配置不同Firebase环境并实现编译时切换?
我刚好之前折腾过Flutter Firebase多环境切换的事儿,完全懂你要的不需要手动替换文件、构建时自动切换的需求!下面分享两种适配Android和iOS的原生方案,都是成熟可靠的:
一、Android端:借助Gradle Product Flavors实现
Android本身的Gradle构建系统就支持多环境配置,直接利用这个特性最省心:
整理配置文件目录
在Android项目的app/src下创建两个子目录:dev和prod,把对应环境的google-services.json分别放进去:android/app/ ├── src/ │ ├── dev/ │ │ └── google-services.json # 测试环境配置 │ ├── prod/ │ │ └── google-services.json # 生产环境配置 │ └── main/ └── build.gradle配置Gradle Product Flavors
打开android/app/build.gradle,在android节点下添加flavors配置:android { // ... 其他原有配置 flavorDimensions "environment" productFlavors { dev { dimension "environment" applicationIdSuffix ".dev" // 可选:给测试包加后缀区分 versionNameSuffix "-dev" } prod { dimension "environment" // 生产环境用默认的applicationId和versionName } } }配置完成后,Gradle会自动根据你指定的flavor加载对应目录下的
google-services.json,完全不需要额外的复制脚本。Flutter构建时指定环境
运行或构建时通过--flavor参数指定环境:# 运行测试环境 flutter run --flavor dev # 构建生产环境APK flutter build apk --flavor prod
二、iOS端:利用Xcode Scheme + 构建脚本实现
iOS这边没有像Android那样的flavor原生支持,但可以通过Scheme配合构建脚本实现自动复制配置文件:
准备多环境配置文件
在iOS项目根目录(ios/)下放置两个配置文件:GoogleServices-Info-Dev.plist(测试环境)和GoogleServices-Info-Prod.plist(生产环境)。创建Xcode Scheme
打开Xcode,点击顶部的Scheme选择框 →New Scheme...,分别创建Dev和Prod两个Scheme,对应你的测试和生产环境。添加构建脚本
选中某个Scheme(比如Dev),点击Edit Scheme...→ 切换到Build标签页 → 点击左上角的+选择New Run Script Phase,然后添加以下脚本:# 复制测试环境的plist到目标位置 cp "${PROJECT_DIR}/GoogleServices-Info-Dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleServices-Info.plist"同样的操作给
ProdScheme添加脚本,把Dev换成Prod即可。注意:脚本里的路径要用Xcode提供的环境变量,避免硬编码路径导致不同机器上构建失败。另外要把这个Run Script Phase拖到
Copy Bundle Resources之前执行,否则复制的文件不会被打包进去。Flutter构建时指定Scheme
运行或构建时通过--flavor和--scheme参数指定环境:# 运行测试环境 flutter run --flavor dev --scheme Dev # 构建生产环境IPA flutter build ios --flavor prod --scheme Prod
三、代码层面的配合(可选)
如果需要对应环境的代码逻辑区分,可以创建不同的入口文件:比如lib/main_dev.dart和lib/main_prod.dart,在构建时指定入口:
flutter run --flavor dev --target lib/main_dev.dart
在入口文件里初始化Firebase时,也可以根据环境做不同的配置(不过大部分情况下,配置文件已经足够区分)。
内容的提问来源于stack exchange,提问作者Daniel Brotherston

