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

如何用secrets-gradle-plugin隐藏FCM API密钥并替换资源字符串为BuildConfig常量

解决方案:用secrets-gradle-plugin替换资源字符串并配置Firebase初始化

一、将资源字符串替换为BuildConfig常量

  1. 配置插件生成BuildConfig常量
    先在项目根目录的local.properties中添加FCM相关密钥:

    firebase_api_key=你的API密钥
    firebase_project_id=你的项目ID
    firebase_messaging_sender_id=你的Sender ID
    firebase_app_id=你的App ID
    

    接着在模块级build.gradle(通常是app模块)中配置插件,指定要生成的BuildConfig字段:

    plugins {
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    }
    
    secrets {
        propertiesFileName = "local.properties"
        // 定义要生成的BuildConfig常量
        buildConfigFields {
            firebase_api_key {
                type = "String"
                value = "\"${secrets.load('firebase_api_key')}\""
            }
            firebase_project_id {
                type = "String"
                value = "\"${secrets.load('firebase_project_id')}\""
            }
            firebase_messaging_sender_id {
                type = "String"
                value = "\"${secrets.load('firebase_messaging_sender_id')}\""
            }
            firebase_app_id {
                type = "String"
                value = "\"${secrets.load('firebase_app_id')}\""
            }
        }
    }
    

    同步Gradle后,插件会自动在BuildConfig类中生成BuildConfig.firebase_api_key这类常量。

  2. 清理资源字符串
    删除res/values/strings.xml中所有FCM相关的密钥条目,比如:

    <!-- 移除这些内容 -->
    <string name="firebase_api_key">xxx</string>
    <string name="firebase_project_id">xxx</string>
    

二、让Firebase初始化使用BuildConfig常量

通过手动初始化Firebase,替换默认的资源字符串读取逻辑:

  1. 在自定义Application类中手动初始化
    若没有自定义Application类,先在AndroidManifest.xml中注册;已有则修改如下:

    public class MyApp extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            // 构建Firebase配置选项
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setApiKey(BuildConfig.firebase_api_key)
                    .setApplicationId(BuildConfig.firebase_app_id)
                    .setProjectId(BuildConfig.firebase_project_id)
                    .setMessagingSenderId(BuildConfig.firebase_messaging_sender_id)
                    .build();
            // 初始化FirebaseApp
            FirebaseApp.initializeApp(this, options);
        }
    }
    

    Kotlin版本:

    class MyApp : Application() {
        override fun onCreate() {
            super.onCreate()
            val options = FirebaseOptions.Builder()
                .setApiKey(BuildConfig.firebase_api_key)
                .setApplicationId(BuildConfig.firebase_app_id)
                .setProjectId(BuildConfig.firebase_project_id)
                .setMessagingSenderId(BuildConfig.firebase_messaging_sender_id)
                .build()
            FirebaseApp.initializeApp(this, options)
        }
    }
    
  2. 清理旧配置(可选)
    若之前使用google-services插件,现在可移除相关配置:

    • 删除项目根目录build.gradle中的classpath 'com.google.gms:google-services:x.x.x'
    • 移除模块级build.gradle中的id 'com.google.gms.google-services'插件
    • 删除google-services.json文件

三、验证配置

  1. 确保local.properties已添加到.gitignore,避免提交到Git:
    local.properties
    
  2. 编译项目,检查BuildConfig类是否生成了对应常量
  3. 运行应用,测试FCM功能是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:58:34