2014-08-31 45 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