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

Gradle task to change a boolean in build config

我想创建一个非常简单的任务来更改我的 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"(cmd 行中有或没有 "noFakeBluetooth")。

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

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

这个有效

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

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

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

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