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

时间:2018-02-05 10:46:55

标签: android android-studio jenkins gradle android-gradle

我依靠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文件并修改构建文件?

2 个答案:

答案 0 :(得分:0)

首先在根项目目录中创建名为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 {
    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
        }
    }
}

答案 1 :(得分:0)

管理好了解决这个问题。根据{{​​3}},配置按以下顺序应用:

  

项目根目录中的gradle.properties。

     

GRADLE_USER_HOME目录中的gradle.properties。

     

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

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