You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.json
  • app/src/uat/google-services.json
  • app/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:15:29