2014-05-22 112 views
24

我遇到了System.getenv()为环境变量返回null的问题。我的密码存储在RELEASE_PASSWORD环境变量中。当我这样做:Android gradle build System.getEnv(“RELEASE_PASSWORD”)返回null

$ echo $RELEASE_PASSWORD

它打印出正确的值,所以我知道该变量设置。

我最初设置signingConfig signingConfigs.release版本 buildType和一切工作正常,但我需要不同的签署配置为不同的产品口味。如果我对密码进行了硬编码,它的工作原理就像是假设的那样。当我尝试从环境变量中读取密码时,情况只会变得不可思议。

它是一种范围问题?

这是我目前在我的build.gradle

android { 

    ... 

    signingConfigs { 
    release { 
     storeFile ...; 
     keyAlias ...; 
     storePassword System.getenv("RELEASE_PASSWORD"); 
     keyPassword System.getenv("RELEASE_PASSWORD"); 
    } 

    unsigned { 
     keyAlias ""; 
     storePassword ""; 
     keyPassword ""; 
    } 
    } 

    buildTypes { 
    debug { 
     versionNameSuffix = "-DEBUG" 
    } 

    release { 
    } 
    } 

    flavorGroups "storeFront" 

    productFlavors { 
    def googleVariable = signingConfigs.release 
    def amazonVariable = signingConfigs.unsigned 

    google { 
     flavorGroup "storeFront" 
     signingConfig googleVariable 
    } 

    amazon { 
     flavorGroup "storeFront" 
     signingConfig amazonVariable 
    } 
    } 
} 

回答

13

Android Studio不会将环境变量传递给Gradle,因此您尝试执行的操作不能从IDE工作。如果你想办法,以避免在构建文件保持存储密码,这里是用代码的答案将其保存在单独的文件:

Sign APK without putting keystore info in build.gradle

+0

谢谢!现在我想到了,我没有在Android Studio中进行googleRelease构建,所以之前我从未碰到过这个问题。实际构建释放apks的人是从命令行执行的。感谢您及时的回复。 – HMCFletch

+6

@Scott,你知道为什么Android Studio不会将环境变量传递给Gradle吗?或为此的解决方法? –

+0

我认为这改变了。对我来说(使用Windows)只需重新启动Android Studio就足够了。 –

9

您可以在命令行运行Android Studio来获得传递给IDE的环境变量。在Mac OS中,您可以通过运行终端运行/Applications/Android\ Studio.app/Contents/MacOS/studio

+0

我今天自己来到这个答案。这是不幸的,我发现迄今为止在gradle脚本中使用env变量的唯一方法... – manroe

+0

是的,在我们的Bamboo构建服务器上,它正常工作,因为命令行,但没有在我的开发iMac:< –

14

对于Windows用户,如果您创建新的环境变量,则需要重新启动PC。我不知道Windows有什么问题,但这就是它的工作原理。我想的是什么,在我的剧本的gradle我写一个任务来打印这样我JAVA_HOME变量路径:

task printJavaHome{ 
    println System.getenv("JAVA_HOME") 
} 

,然后用gradle这个同步。

然后在您的Studio中打开终端窗口。

和类型:

gradlew -q printJavaHome 

,如果你设置,否则它会打印null这将显示您的Java主路径。

在执行上述命令之前,请确保终端指向项目的根目录。

现在尝试设置一个新的环境变量并加载它,并尝试按上述步骤进行打印。如果您使用的是Windows,您将看到null。但是什么时候你会重新启动PC并再次执行命令,然后它会返回你的环境变量的实际值。

这就是我所经历和想到的分享,可能对某人有用。

1

对我来说(使用Windows)只需要重新启动Android Studio

+0

如果这doesn'帮助,然后重新启动你的窗户。当你没有管理员凭证并且你设置了用户的环境变量时,这对我有效。 – Aks4125