Android 的 Secrets Gradle 插件
这是一个 Gradle 插件,用于安全地为您的 Android 项目提供密钥。
该 Gradle 插件从未纳入版本控制的属性文件(如 local.properties
)中读取密钥,并将这些属性作为变量暴露在 Gradle 生成的 BuildConfig
类和 Android 清单文件中。
免责声明: 该插件主要用于将您的密钥隐藏在版本控制之外。由于您的密钥是静态二进制文件的一部分,通过反编译 APK 仍可恢复您的 API 密钥。因此,建议使用其他措施(如可能的话添加限制)来保护您的密钥。
要求
- 基于 Gradle 的 Android 项目
- Android Gradle 插件 7.0.2
安装
注意:从 v1.1.0 版本开始,插件 ID 已更改为 "com.google.android.libraries.mapsplatform.secrets-gradle-plugin",现在通过 Google Maven (gMaven) 进行分发。您仍可以从 Gradle 的插件门户下载以前版本的插件,但新版本现在只会通过 gMaven 分发。
- 在项目根目录的
build.gradle
文件中:
Groovy:
buildscript {
dependencies {
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
}
}
Kotlin:
buildscript {
dependencies {
classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1")
}
}
- 在应用级
build.gradle
文件中:
Groovy:
plugins {
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
Kotlin:
plugins {
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
}
该插件还支持库模块类型(com.android.library
)。只需在库级 build.gradle
文件中安装插件,密钥也将在该模块中可见。
快照版本
通过 GitHub Packages 分发的快照版本也可用于最新修复。要使用快照版本,请在项目级 build.gradle
文件中添加以下仓库:
Groovy:
buildscript {
repositories {
maven {
url = uri("https://maven.pkg.github.com/google/secrets-gradle-plugin")
credentials {
username = project.findProperty("GITHUB_USER") ?: System.getenv("GITHUB_USER")
password = project.findProperty("GITHUB_TOKEN") ?: System.getenv("GITHUB_TOKEN")
}
}
}
dependencies {
classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:<version>-SNAPSHOT"
}
}
另外,请参阅 GitHub Packages 身份验证。
使用示例
根项目下 local.properties
的示例内容:
apiKey=YOUR_API_KEY
应用插件并构建项目后,API 密钥可通过两种方式访问。
- 作为
BuildConfig
值:
val apiKey = BuildConfig.apiKey
- 作为
AndroidManifest.xml
文件中可访问的变量:
<meta-data android:value="${apiKey}" />
CI/CD 系统
对于 CI/CD 系统,考虑创建并在版本控制中检入一个默认属性文件,该文件包含应用程序所需的所有相同密钥,但使用_安全_的默认值。要做到这一点,创建一个属性文件并将 defaultPropertiesFileName
值设置为该文件名。例如:
secrets {
defaultPropertiesFileName = 'local.defaults.properties'
}
配置选项
插件可以选择性地进行配置:
secrets {
// 将属性文件从根项目中的默认 "local.properties" 更改为
// 根项目中的另一个属性文件。
propertiesFileName 'secrets.properties'
// 包含默认密钥值的属性文件。此文件可以在版本控制中检入。
defaultPropertiesFileName = 'secrets.defaults.properties'
// 通过提供正则表达式来配置插件应忽略哪些密钥。
// "sdk.dir" 默认被忽略。
ignoreList.add("keyToIgnore") // 忽略密钥 "keyToIgnore"
ignoreList.add("sdk.*") // 忽略所有匹配正则表达式 "sdk.*" 的密钥
}
特定构建变体的属性
要设置特定构建变体(构建类型或风格)的属性,在项目根目录创建一个与变体同名的属性文件。例如,要为 release
构建类型设置特定的密钥,创建一个名为 release.properties
的新文件,其中包含特定于发布版本的密钥。
贡献
我们始终欢迎并鼓励对此库的贡献!
有关如何开始的更多信息,请参阅 CONTRIBUTING.md 和 CODE_OF_CONDUCT.md。
许可证
Apache 2.0。有关更多信息,请参阅 LICENSE。