2015-02-12 18 views
6

Chciałbym utworzyć bardzo proste zadanie, które zmienia wartość logiczną w mojej konfiguracji gradle.Zadanie Gradle, aby zmienić boolean w kompilacji konfiguracji

Pracuję nad aplikacją dla Androida, która może być uruchamiana z kilkoma profilami, a dla każdej kompilacji należy określić, czy w moim kodzie aplikacja musi podrobić bluetooth, czy nie.

Moja Gradle (odpowiedni kod):

def fakeBluetooth = "true" 

buildTypes { 
    debug { 
     minifyEnabled false 
     signingConfig android.signingConfigs.debug 
     buildConfigField "boolean", "fakeBluetooth", fakeBluetooth 
    } 
    release { 
     minifyEnabled true 
     signingConfig android.signingConfigs.release 
     buildConfigField "boolean", "fakeBluetooth", fakeBluetooth 
    } 
} 

task noFakeBluetooth { 
    fakeBluetooth = "false" 
} 

Przykład zastosowania w moim kodu Java:

if (BuildConfig.fakeBluetooth) { 
    processFictiveBluetoothService(); 
} else { 
    // other case 
} 

przykłady użycia w wierszu poleceń:

./gradlew iDebug noFakeBluetooth 

i

./gradlew iDebug 

Problem: w obu przypadkach wartość fakeBluetooth jest zawsze "prawdziwa" (z lub bez "noFakeBluetooth" w wierszu cmd).

Odpowiedz

16

Można użyć właściwości projektu przekazać wartość:

buildTypes { 
    debug { 
     minifyEnabled false 
     signingConfig android.signingConfigs.debug 
     buildConfigField "boolean", "fakeBluetooth", fakeBluetooth() 
    } 
    release { 
     minifyEnabled true 
     signingConfig android.signingConfigs.release 
     buildConfigField "boolean", "fakeBluetooth", fakeBluetooth() 
    } 
} 

def fakeBluetooth() { 
    def value = project.getProperties().get("fakeBluetooth") 
    return value != null ? value : "true" 
} 

A potem można przekazać nieruchomość z:

./gradlew iDebug -PfakeBluetooth=true 
+0

Dzięki, że to co zrobiłem – psv

0

Działa

android.defaultConfig.buildConfigField "String", "value", "1" 
+0

Jest to również rozwiązanie. W zależności od implement ... Dzięki – psv

+0

W moim przypadku używam go do ustawiania parametrów konfiguracyjnych w zadaniach –

0

myślę prawidłowe podejście byłoby zdefiniowanie wartości zasobów dla buildTypes lub productFlavours:

resValue "string", "key", "value"

następnie odczytać z niego wewnątrz kodzie jak: getResources().getString(R.string.key);

Powiązane problemy