Gradle任务在构建配置中更改布尔值

时间:2015-02-12 10:25:03

标签: android android-gradle build.gradle

我想创建一个非常简单的任务,它在我的gradle配置中更改一个布尔值。

我在Android应用程序上工作,可以使用多个配置文件运行,并且对于每个构建,需要指定在我的代码中应用程序是否必须伪造蓝牙。

我的gradle(相关代码):

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

在我的java代码中使用的示例:

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

在命令行中使用的示例:

./gradlew iDebug noFakeBluetooth

./gradlew iDebug

问题:在这两种情况下,fakeBluetooth的值总是" true" (有或没有" noFakeBluetooth"在cmd行中)。

3 个答案:

答案 0 :(得分:16)

您可以使用项目属性传递值:

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

然后你可以通过以下方式传递属性:

./gradlew iDebug -PfakeBluetooth=true

答案 1 :(得分:1)

这有效

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

答案 2 :(得分:0)

我认为正确的方法是为buildTypes或productFlavours定义资源值:

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

然后在你的代码中读出它,如: getResources().getString(R.string.key);