Android Gradle keyAlias 变量存储在单独的文件中
Posted
技术标签:
【中文标题】Android Gradle keyAlias 变量存储在单独的文件中【英文标题】:Android Gradle keyAlias variables stored in separate file 【发布时间】:2018-07-15 04:56:15 【问题描述】:我正在开发依赖 Jenkins CI 的 android 项目。所有签名密钥都存储在加密的 gradle.properties 文件中的单独存储库中。在项目存储库中, gradle.properties 文件被跟踪并且(显然)不包含密钥。
这是项目模块的示例 build.gradle 签名部分:
signingConfigs
release
keyAlias KEY_ALIAS
storeFile file(KEYSTORE_PATH)
storePassword KEYSTORE_PASSWORD
keyPassword MOBILE_KEY_PASSWORD
我的问题是:如何将这些密钥存储在我的本地开发机器上,并且能够在不更改 gradle.properties 文件和修改构建文件的情况下构建项目?
【问题讨论】:
【参考方案1】:首先在项目根目录下创建一个名为external.properties
的文件。
然后检查这个文件是否存在
def externalPropertyFile = file("$rootProject.projectDir.path$File.separatorexternal.properties")
if (!propertyFile.exist())
throw new GradleException("external.property file doesn't exist")
验证当前上下文中是否存在属性,如果不加载属性文件
if (!rootProject.ext.has("externalProperties"))
rootProject.ext
externalProperties = new Properties()
externalProperties.load(propertyFile.newReader())
如果属性不可用,您可以在signingConfigs 中执行相同的检查并省略发布版本:
signingConfigs
if (rootProject.ext.has("externalProperties"))
release
keyAlias rootProject.externalProperties.KEY_ALIAS
storeFile file(rootProject.externalProperties.KEYSTORE_PATH)
storePassword rootProject.externalProperties.KEYSTORE_PASSWORD
keyPassword rootProject.externalProperties.MOBILE_KEY_PASSWORD
【讨论】:
抱歉,这需要修改我的构建脚本。 @JanSlominski 如果您无法更改属性或脚本,则无法更改 gradle 进程。我建议您查看Build and sign your app from command line 部分【参考方案2】:设法弄清楚这一点。根据Gradle docs,配置按以下顺序应用:
项目根目录中的gradle.properties。
GRADLE_USER_HOME 目录中的 gradle.properties。
系统属性,例如在命令上设置 -Dgradle.user.home 时 行。
所以我要做的就是在 gradle 主目录(Mac 上的 /USERNAME/.gradle/)中添加自定义 gradle.properties 文件
【讨论】:
请注意,其他应用程序中的配置也会被覆盖 @LionelBriand 你是对的,谢谢你的警告!以上是关于Android Gradle keyAlias 变量存储在单独的文件中的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio apk体积突然变大(升级gradle后)
Android项目的build.gradle配置依赖仓库链接的文件变到setting.gradle中了