2014-08-31 173 views
15

我正在使用Android Studio在Ubuntu 14.04系统上构建我的项目。使用Android Studio的Gradle中使用系统环境变量的正确方法

我写在我的build.gradle文件中的以下以避免硬编码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这个同步错误了下列要求: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中使用环境变量的正确方法?

+0

看看这篇文章:http://stackoverflow.com/questions/21173826/environment-variable-in-settings-gradle-not-working-with-android-studio – Opal 2014-09-01 09:42:11

回答

5

在你的源文件夹中创建一个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

7

我也喜欢将我的密钥库信息放在我的环境变量上,而不是将它放在项目中。你的代码看起来很好,但我遇到了与文件路径相同的问题。我解决它由值转换为字符串,将它传递给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")   
} 

希望这有助于。

+0

你摇滚!这是我发现的最简单的解决方案在build.gradle环境var问题和使用android工作室 – spartygw 2016-02-22 19:22:56

+1

添加上述修复后,现在我有Android工作室抱怨调试apk没有签名。 “错误:当前所选变体(apk)的apk没有签名,请为此变体指定一个签名配置),它会带我进入运行/调试配置窗口,构建错误消失,但现在,我无法从Android Studio coz中运行此错误的应用程序 – 2016-06-13 18:53:09

+0

添加'String.value()'方法为我工作 – Alex 2016-08-10 14:30:09