敏感信息管理 (Secrets)
在项目中,API 密钥、签名密码、仓库凭据等敏感信息绝不能直接硬编码在 build.gradle.kts 中并提交到 Git 仓库。
1. 使用 local.properties (本地开发)
这是 Android 项目的标准做法。local.properties 默认已被 .gitignore 排除。
properties
# 存放你的私密数据
MY_SECRET_KEY=ABC123456
SIGNING_PASSWORD=password123kotlin
// 读取属性
val properties = Properties().apply {
val propertiesFile = rootProject.file("local.properties")
if (propertiesFile.exists()) {
load(propertiesFile.inputStream())
}
}
val secretKey = properties.getProperty("MY_SECRET_KEY") ?: ""2. 使用环境变量 (CI/CD 生产)
在 Jenkins、GitHub Actions 等流水线中,应使用环境变量注入。
kotlin
// 优先从环境变量读,拿不到再读本地属性
val signingPass = System.getenv("RELEASE_SIGNING_PASSWORD")
?: properties.getProperty("SIGNING_PASSWORD")3. 使用 Google 的 Secrets Gradle Plugin (推荐)
这是目前最优雅的方案,它能自动生成 BuildConfig 字段,且无需手动解析 Properties。
kotlin
plugins {
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1"
}properties
MAPS_API_KEY=AIza...kotlin
// 插件会自动将其注入到 BuildConfig
val apiKey = BuildConfig.MAPS_API_KEY4. 存储签名文件的最佳实践
技巧
不要直接把 .jks 或 .keystore 文件放在项目目录下。 建议放在系统用户目录下的隐藏文件夹中,并通过绝对路径(动态获取当前用户目录)引用。
kotlin
// 引用用户目录下的文件
storeFile = file("\${System.getProperty("user.home")}/.android/my-release-key.jks")