Skip to content

敏感信息管理 (Secrets)

在项目中,API 密钥、签名密码、仓库凭据等敏感信息绝不能直接硬编码在 build.gradle.kts 中并提交到 Git 仓库。

1. 使用 local.properties (本地开发)

这是 Android 项目的标准做法。local.properties 默认已被 .gitignore 排除。

properties
# 存放你的私密数据
MY_SECRET_KEY=ABC123456
SIGNING_PASSWORD=password123
kotlin
// 读取属性
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_KEY

4. 存储签名文件的最佳实践

技巧

不要直接把 .jks.keystore 文件放在项目目录下。 建议放在系统用户目录下的隐藏文件夹中,并通过绝对路径(动态获取当前用户目录)引用。

kotlin
// 引用用户目录下的文件
storeFile = file("\${System.getProperty("user.home")}/.android/my-release-key.jks")