使用Android Studio在gradle中使用系统环境变量的正确方法

时间:2014-08-31 04:49:51

标签: android gradle android-studio android-gradle

我正在使用Android Studio在Ubuntu 14.04系统上构建我的项目。

我在build.gradle文件中写了以下内容,以避免在我的git repo中硬编码storeFile,storePassword,keyAlias和keyPassword:

signingConfigs {
 debug {

    storeFile file(System.getenv("KEYSTORE"))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }

但是使用以下内容解决了gradle sync错误:Error:(49, 0) Neither path nor baseDir may be null or empty string. path='null' basedir='./pathto/TMessagesProj'

我的.bashrc包含:source ~/.gradlerc,我的〜/ .gradlerc包含以下内容:

export KEYSTORE="/home/myname/keystore/mykey"
export KEYSTORE_PASSWORD='mypass'
export KEY_ALIAS='mykey'
export KEY_PASSWORD='keypass'

我已经确认这些变量是由shell正确导入的。但是我不确定它为什么没有被Android Studio中的构建环境接收。

在gradle中使用环境变量的正确方法是什么?

2 个答案:

答案 0 :(得分:19)

我也喜欢在我的环境变量上获取密钥库信息,而不是将其放在项目中。您的代码似乎很好,但我遇到了与文件路径相同的问题。我通过将该值转换为字符串,然后将其传递给file()来解决它:

signingConfigs {
 debug {
    storeFile file(String.valueOf(System.getenv("KEYSTORE")))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }

希望这有帮助。

答案 1 :(得分:7)

在源文件夹中创建gradle.properties文件(与build.gradle一起)以仅应用于当前项目或~/.gradle/gradle.properties以在系统范围内应用内容:

keystore=/home/myname/keystore/mykey
keystore_password=mypass
key_alias=mykey
key_password=keypass

现在使用:

更新build.gradle文件
debug {
  storeFile file("${keystore}")
  storePassword "${keystore_password}"
  keyAlias "${key_alias}"
  keyPassword "${key_password}"
}

或者,您可以使用-P选项从命令行传递参数。例如,./gradlew assemble -Pkey_password=keypass