Android Gradle keyalias变量存储在单独的文件中



我正在开发依赖于 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 文件和修改构建文件的情况下构建项目?

首先在根项目目录中创建一个名为 external.properties 的文件。

然后检查此文件是否存在

def externalPropertyFile = file("${rootProject.projectDir.path}${File.separator}external.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
        }
    }
}

设法弄清楚了这个问题。根据 Gradle 文档,配置按以下顺序应用:

项目根目录中的 gradle.properties。

gradle.properties in GRADLE_USER_HOME 目录中。

系统属性,例如,当在命令上设置 -Dgradle.user.home 时 线。

所以我所要做的就是在 gradle 主目录中添加自定义 gradle.properties 文件(Mac 上的/USERNAME/.gradle/(

最新更新