Flutter/Firebase环境变量配置:保护google-services.json等文件免密钥泄露
分步搞定Flutter安卓项目敏感文件保护
一、先把敏感文件排除在Git提交外
先做最基础的一步:用.gitignore阻止google-services.json和firebase.json被误传到GitHub:
- 找项目根目录的
.gitignore文件(没有就新建一个) - 打开后在末尾加两行:
android/app/google-services.json firebase.json - 保存后执行这两个命令提交修改:
git add .gitignore git commit -m "Ignore sensitive Firebase config files"
二、替换google-services.json:手动用环境变量配置(不用额外工具)
既然你已经用flutter_dotenv手动配置了Firebase选项,其实完全可以丢掉google-services.json,直接在安卓项目里填配置:
- 打开安卓模块的
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')}" ] } - 打开
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> - 把刚才用到的这些Firebase值,加到你已经有的
.env文件里,比如:FIREBASE_API_KEY=你的真实API密钥 FIREBASE_APP_ID=你的APP ID FIREBASE_PROJECT_ID=你的项目ID FIREBASE_STORAGE_BUCKET=你的存储桶地址 FIREBASE_MESSAGING_SENDER_ID=你的发送者ID - 最后把原来的
google-services.json移到项目外备份或者直接删掉,现在项目构建会用你.env里的配置,完全不需要这个文件了
三、处理firebase.json:本地留着,给队友传模板(如果需要协作)
firebase.json是Firebase CLI的配置文件,里面的项目ID之类的信息不用上传:
- 已经加到
.gitignore里了,本地自己留着用就行,用Firebase CLI的时候完全不受影响 - 要是有其他开发者一起做,可以建个
firebase.json.template文件,把敏感内容换成占位符,比如:{ "project": "YOUR_PROJECT_ID_HERE", "hosting": { "public": "build/web", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } } - 把这个模板传到GitHub,队友复制一份改名叫
firebase.json,填上自己的项目信息就能用
四、验证一下配置是否正常
- 先跑
flutter clean清掉之前的构建缓存 - 执行
flutter run启动项目,确认Firebase的功能都能正常用 - 再跑
git status,看看google-services.json和firebase.json是不是显示成“untracked”状态,确保不会被提交
内容的提问来源于stack exchange,提问作者Gaurav Paul
相关产品推荐
相关产品推荐

