2014-08-31 8 views
15

Używam Android Studio do zbudowania mojego projektu na systemie Ubuntu 14.04.Właściwy sposób korzystania ze zmiennych środowiskowych systemu w gradle przy użyciu Android Studio

ja pisał w moich plikach build.gradle uniknąć hardcoding storeFile, storePassword, keyAlias ​​i keyPassword w moim repo git:

signingConfigs { 
debug { 

    storeFile file(System.getenv("KEYSTORE")) 
    storePassword System.getenv("KEYSTORE_PASSWORD") 
    keyAlias System.getenv("KEY_ALIAS") 
    keyPassword System.getenv("KEY_PASSWORD")   
} 

Ale Gradle błędy synchronizacji obecnie z następujących czynności: Error:(49, 0) Neither path nor baseDir may be null or empty string. path='null' basedir='./pathto/TMessagesProj'

Moja .bashrc zawiera: source ~/.gradlerc i moja ~/.gradlerc zawiera następujące elementy:

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

Ustaliliśmy tha t te zmienne są importowane poprawnie przez powłokę. Jednak nie jestem pewien, dlaczego nie jest odbierane przez środowisko kompilacji w Android Studio.

Jaki jest właściwy sposób używania zmiennych środowiskowych w gradle?

+0

Spójrz na ten wpis: http://stackoverflow.com/questions/21173826/environment-variable-in-settings-gradle-not-working- with-android-studio – Opal

Odpowiedz

5

Utwórz plik gradle.properties w folderze źródłowym (obok build.gradle) stosuje się tylko do bieżącego projektu lub w ~/.gradle/gradle.properties zastosowanie całego systemu z treścią:

keystore=/home/myname/keystore/mykey 
keystore_password=mypass 
key_alias=mykey 
key_password=keypass 

teraz zaktualizować plik build.gradle z :

debug { 
    storeFile file("${keystore}") 
    storePassword "${keystore_password}" 
    keyAlias "${key_alias}" 
    keyPassword "${key_password}" 
} 

Opcjonalnie można przekazać parametry z linii poleceń z opcją -P. Na przykład: ./gradlew assemble -Pkey_password=keypass.

7

Lubię również przechowywać moje informacje o plikach kluczy w moich zmiennych środowiskowych, zamiast przechowywać je w projekcie. Twój kod wydaje się być w porządku, ale miałem ten sam problem ze ścieżką pliku. Rozwiązałem go poprzez przekształcenie tej wartości na ciąg przed przekazaniem go do 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")   
} 

nadzieję, że to pomaga.

+0

Skałasz! To jest najłatwiejsze rozwiązanie, które znalazłem w środowisku var problem w build.gradle i korzystam z android studio – spartygw

+1

Po dodaniu powyższej poprawki, teraz mam studio Android narzekające, że debugujący apk nie jest podpisany. "Błąd: plik APK dla aktualnie wybranego wariantu (..apk) nie jest podpisany Proszę podać konfigurację podpisu dla tego wariantu) Prowadzi mnie do okna konfiguracji uruchamiania/debugowania. Błąd kompilacji zniknął, ale teraz ja nie można uruchomić aplikacji z Android studio coz tego błędu. –

+0

dodanie metody 'String.value()' działa dla mnie – Alex