J'ai 2 saveurs, disons Vanille et Chocolat. J'ai également des types de build Debug et Release, et j'ai besoin de Vanilla Release pour avoir un champ vrai, tandis que les 3 autres combinaisons devraient être fausses.
def BOOLEAN = "boolean"
def VARIABLE = "VARIABLE"
def TRUE = "true"
def FALSE = "false"
Vanilla {
debug {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
release {
buildConfigField BOOLEAN, VARIABLE, TRUE
}
}
CHOCOLATE {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
J'ai une erreur, donc je suppose que l'astuce de débogage et de libération ne fonctionne pas. Est-il possible de faire cela?
Bouclez les variantes et vérifiez leurs noms:
productFlavors {
Vanilla {}
chocolate {}
}
applicationVariants.all { variant ->
println("Iterating variant: " + variant.getName())
if (variant.getName() == "chocolateDebug") {
variant.buildConfigField "boolean", "VARIABLE", "true"
} else {
variant.buildConfigField "boolean", "VARIABLE", "false"
}
}
Voici une solution sans manques que j'ai décrite sous réponse Simas
buildTypes {
debug {}
release {}
}
productFlavors {
Vanilla {
ext {
variable = [debug: "Vanilla-debug value", release: "Vanilla-release value"]
}
}
chocolate {
ext {
variable = [debug: "chocolate-debug value", release: "chocolate-release value"]
}
}
}
applicationVariants.all { variant ->
def flavor = variant.productFlavors[0]
variant.buildConfigField "boolean", "VARIABLE", "\"${flavor.variable[variant.buildType.name]}\""
}
Dans le système de construction Gradle, buildTypes
et productFlavors
sont malheureusement deux entités distinctes.
Pour autant que je sache, pour compléter ce que vous voulez réaliser, vous devez créer une autre version de construction en tant que telle:
buildTypes {
debug{}
release {}
}
productFlavors {
vanillaDebug {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
vanillaRelease {
buildConfigField BOOLEAN, VARIABLE, TRUE
}
chocolate {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
}
Voici comment j'ai résolu cela:
def GAME_DIMENSION = "game"
def BUILD_DIMENSION = "building"
flavorDimensions GAME_DIMENSION, BUILD_DIMENSION
productFlavors {
Lollipop {
dimension BUILD_DIMENSION
minSdkVersion 21
}
normal {
dimension BUILD_DIMENSION
}
game_1 {
dimension GAME_DIMENSION
ext {
fields = [
[type: 'String', name: 'TESTSTRING', values: [debug: 'debugstring', release: 'releasestring']],
[type: 'int', name: 'TESTINT', values: [debug: '1234', release: '31337']]
]
}
}
game_2 {
dimension GAME_DIMENSION
ext {
fields = [] // none for game_2
}
}
}
applicationVariants.all { variant ->
// get the GAME dimension flavor
def game = variant.getProductFlavors()
.findAll({ flavor -> flavor.dimension == GAME_DIMENSION})
.get(0)
println "Adding " + game.ext.fields.size() + " custom buildConfigFields for flavor " + variant.name
// loop over the fields and make appropriate buildConfigField
game.ext.fields.each { field ->
def fldType = field['type']
def fldName = field['name']
def fldValues = field['values']
// get debug/release specific value from values array
def fldSpecificValue = fldValues[variant.getBuildType().name]
// add quotes for strings
if (fldType == 'String') {
fldSpecificValue = '\"' + fldSpecificValue + '\"'
}
println " => " + fldType + " " + fldName + " = " + fldSpecificValue
variant.buildConfigField fldType, fldName, fldSpecificValue
}
}
(Je n'ai pas encore pu déterminer si ext.fields
existe sur une saveur)
Pour votre cas spécifique, vous pouvez également simplement jouer avec defaultConfig:
defaultConfig {
buildConfigField BOOLEAN, VARIABLE, TRUE
}
buildTypes {
debug {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
release {
}
}
productFlavors {
Vanilla {
}
CHOCOLATE {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
}
La valeur par défaut est TRUE, mais vous mettez ensuite FALSE à toutes les versions de débogage et à toutes les versions de Chocolate. Donc, le seul VRAI restant est la version Vanilla.
Vous pouvez essayer ceci pour plusieurs saveurs de produits:
productFlavors {
demo {
applicationId "com.demo"
versionCode 1
versionName '1.0'
ext {
APP_BASE_URL = [debug: "${BASE_URL_DEV}", release: "${BASE_URL_PRODUCTION}"]
}
}
demo1 {
applicationId "com.demo1"
versionCode 1
versionName '1.2'
ext {
APP_BASE_URL = [debug: "${BASE_URL_DEV}", release: "${BASE_URL_PRODUCTION}"]
}
}
applicationVariants.all { variant ->
def flavor = variant.productFlavors[0]
variant.buildConfigField "String", "BASE_URL", "${flavor.ext.APP_BASE_URL[variant.buildType.name]}"
}