如何用secrets-gradle-plugin隐藏FCM API密钥并替换资源字符串为BuildConfig常量
解决方案:用secrets-gradle-plugin替换资源字符串并配置Firebase初始化
一、将资源字符串替换为BuildConfig常量
配置插件生成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这类常量。清理资源字符串
删除res/values/strings.xml中所有FCM相关的密钥条目,比如:<!-- 移除这些内容 --> <string name="firebase_api_key">xxx</string> <string name="firebase_project_id">xxx</string>
二、让Firebase初始化使用BuildConfig常量
通过手动初始化Firebase,替换默认的资源字符串读取逻辑:
在自定义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) } }清理旧配置(可选)
若之前使用google-services插件,现在可移除相关配置:- 删除项目根目录
build.gradle中的classpath 'com.google.gms:google-services:x.x.x' - 移除模块级
build.gradle中的id 'com.google.gms.google-services'插件 - 删除
google-services.json文件
- 删除项目根目录
三、验证配置
- 确保
local.properties已添加到.gitignore,避免提交到Git:local.properties - 编译项目,检查
BuildConfig类是否生成了对应常量 - 运行应用,测试FCM功能是否正常
内容的提问来源于stack exchange,提问作者Hector
相关产品推荐
相关产品推荐

