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

Flutter/Firebase环境变量配置:保护google-services.json等文件免密钥泄露

分步搞定Flutter安卓项目敏感文件保护

一、先把敏感文件排除在Git提交外

先做最基础的一步:用.gitignore阻止google-services.json和firebase.json被误传到GitHub:

  1. 找项目根目录的.gitignore文件(没有就新建一个)
  2. 打开后在末尾加两行:
    android/app/google-services.json
    firebase.json
    
  3. 保存后执行这两个命令提交修改:
    git add .gitignore
    git commit -m "Ignore sensitive Firebase config files"
    

二、替换google-services.json:手动用环境变量配置(不用额外工具)

既然你已经用flutter_dotenv手动配置了Firebase选项,其实完全可以丢掉google-services.json,直接在安卓项目里填配置:

  1. 打开安卓模块的build.gradle(路径:android/app/build.gradle),找到defaultConfig块,加这段配置(把占位符换成你Firebase项目的真实值,这些值从原来的google-services.json里就能找到):
    defaultConfig {
        // 原来的配置别动,加下面这段
        manifestPlaceholders = [
            "firebase_api_key": "${dotenv.get('FIREBASE_API_KEY')}",
            "firebase_app_id": "${dotenv.get('FIREBASE_APP_ID')}",
            "firebase_project_id": "${dotenv.get('FIREBASE_PROJECT_ID')}",
            "firebase_storage_bucket": "${dotenv.get('FIREBASE_STORAGE_BUCKET')}",
            "firebase_messaging_sender_id": "${dotenv.get('FIREBASE_MESSAGING_SENDER_ID')}"
            // 要是用了实时数据库,再加一行:"firebase_database_url": "${dotenv.get('FIREBASE_DATABASE_URL')}"
        ]
    }
    
  2. 打开AndroidManifest.xml(路径:android/app/src/main/AndroidManifest.xml),在<application>标签里加这些meta-data,读取上面的占位符:
    <application ...>
        <!-- 原来的内容保留,加下面这些 -->
        <meta-data
            android:name="com.google.firebase.api_key"
            android:value="${firebase_api_key}" />
        <meta-data
            android:name="com.google.firebase.app_id"
            android:value="${firebase_app_id}" />
        <meta-data
            android:name="com.google.firebase.project_id"
            android:value="${firebase_project_id}" />
        <meta-data
            android:name="com.google.firebase.storage_bucket"
            android:value="${firebase_storage_bucket}" />
        <meta-data
            android:name="com.google.firebase.messaging.sender_id"
            android:value="${firebase_messaging_sender_id}" />
        <!-- 用了实时数据库就加这行 -->
        <!-- <meta-data android:name="com.google.firebase.database_url" android:value="${firebase_database_url}" /> -->
    </application>
    
  3. 把刚才用到的这些Firebase值,加到你已经有的.env文件里,比如:
    FIREBASE_API_KEY=你的真实API密钥
    FIREBASE_APP_ID=你的APP ID
    FIREBASE_PROJECT_ID=你的项目ID
    FIREBASE_STORAGE_BUCKET=你的存储桶地址
    FIREBASE_MESSAGING_SENDER_ID=你的发送者ID
    
  4. 最后把原来的google-services.json移到项目外备份或者直接删掉,现在项目构建会用你.env里的配置,完全不需要这个文件了

三、处理firebase.json:本地留着,给队友传模板(如果需要协作)

firebase.json是Firebase CLI的配置文件,里面的项目ID之类的信息不用上传:

  1. 已经加到.gitignore里了,本地自己留着用就行,用Firebase CLI的时候完全不受影响
  2. 要是有其他开发者一起做,可以建个firebase.json.template文件,把敏感内容换成占位符,比如:
    {
      "project": "YOUR_PROJECT_ID_HERE",
      "hosting": {
        "public": "build/web",
        "ignore": [
          "firebase.json",
          "**/.*",
          "**/node_modules/**"
        ]
      }
    }
    
  3. 把这个模板传到GitHub,队友复制一份改名叫firebase.json,填上自己的项目信息就能用

四、验证一下配置是否正常

  1. 先跑flutter clean清掉之前的构建缓存
  2. 执行flutter run启动项目,确认Firebase的功能都能正常用
  3. 再跑git status,看看google-services.json和firebase.json是不是显示成“untracked”状态,确保不会被提交

内容的提问来源于stack exchange,提问作者Gaurav Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:43:23