Правильный способ использования переменных системной среды в gradle с помощью Android Studio

Я использую Android Studio для создания моего проекта в системе Ubuntu 14.04.

Я написал следующее в моих файлах build.gradle, чтобы избежать hardcoding storeFile, storePassword, keyAlias ​​и keyPassword в моем реестре git:

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'

My.bashrc содержит: source ~/.gradlerc, а my ~/.gradlerc содержит следующее:

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

Я подтвердил, что эти переменные корректно импортируются оболочкой. Однако я не уверен, почему он не получен в среде сборки в Android Studio.

Каков правильный способ использования переменных среды в gradle?

Ответы

Ответ 1

Мне также нравится иметь свою ключевую информацию о переменных среды, а не иметь ее внутри проекта. Ваш код кажется прекрасным, но у меня была такая же проблема с файловым путем. Я решил это, преобразовывая это значение в строку перед тем, как передать его в 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")        
 }

Надеюсь, что это поможет.

Ответ 2

Создайте файл 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.