Задача 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 ответа
Вы можете использовать свойства проекта для передачи значения:
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);