2014-05-22 113 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