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

psv*_*psv 7 android build.gradle android-gradle-plugin

我想创建一个非常简单的任务,它在我的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"
}
Run Code Online (Sandbox Code Playgroud)

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

if (BuildConfig.fakeBluetooth) {
    processFictiveBluetoothService();
} else {
    // other case
}
Run Code Online (Sandbox Code Playgroud)

在命令行中使用的示例:

./gradlew iDebug noFakeBluetooth
Run Code Online (Sandbox Code Playgroud)

./gradlew iDebug
Run Code Online (Sandbox Code Playgroud)

问题:在两种情况下,fakeBluetooth的值始终为"true"(在cmd行中有或没有"noFakeBluetooth").

rci*_*ati 17

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

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"
}
Run Code Online (Sandbox Code Playgroud)

然后你可以通过以下物业:

./gradlew iDebug -PfakeBluetooth=true
Run Code Online (Sandbox Code Playgroud)