psv psv - 3 months ago 41
Android Question

Gradle task to change a boolean in build config

I would like to create a very simple task which change a boolean in my gradle config.

I work on an Android application which can be run with several profiles, and for each build a need to specify if in my code the app must fake the bluetooth or not.

My gradle (relevant code) :

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"
}


Example of use in my java code :

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


Examples of use in command line :

./gradlew iDebug noFakeBluetooth


and

./gradlew iDebug


Problem : in both cases the value of fakeBluetooth is always "true" (with or without "noFakeBluetooth" in cmd line).

Answer

You can use project properties to pass the value:

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"
}

And then you can pass the property with:

./gradlew iDebug -PfakeBluetooth=true