tutorial now must flavors flavor belong all android gradle android-gradle build-tools

now - android build variants



Defina buildconfigfield para un sabor especĂ­fico Y buildType (6)

Aquí hay una solución sin fallas que he descrito en la respuesta de 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.ext.variable[variant.buildType.name]}/"" }

Tengo 2 sabores, digamos vainilla y chocolate. También tengo tipos de compilación Debug and Release, y necesito que Vanilla Release tenga un campo verdadero, mientras que las otras 3 combinaciones deberían ser falsas.

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 }

Tengo un error, así que supongo que el truco de eliminación de errores y versiones no funciona. ¿Es posible hacer esto?


Así es como resolví esto:

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

(Todavía no he podido determinar si ext.fields existe en un sabor)


Dentro del sistema de compilación Gradle, buildTypes y buildTypes son desafortunadamente dos entidades separadas.

Por lo que sé, para completar lo que desea lograr, deberá crear otro sabor de construcción como tal:

buildTypes { debug{} release {} } productFlavors { vanillaDebug { buildConfigField BOOLEAN, VARIABLE, FALSE } vanillaRelease { buildConfigField BOOLEAN, VARIABLE, TRUE } chocolate { buildConfigField BOOLEAN, VARIABLE, FALSE } }


Haz un bucle con las variantes y comprueba sus nombres:

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


Para su caso específico, también puede jugar con defaultConfig:

defaultConfig { buildConfigField BOOLEAN, VARIABLE, TRUE } buildTypes { debug { buildConfigField BOOLEAN, VARIABLE, FALSE } release { } } productFlavors { VANILLA { } CHOCOLATE { buildConfigField BOOLEAN, VARIABLE, FALSE } }

El valor predeterminado es VERDADERO, pero luego pone FALSE en todas las compilaciones de Debug y en todas las compilaciones de Chocolate. Entonces, el único VERDADERO que queda es el lanzamiento de VANILLA.


productFlavors { vanilla {} chocolate {} } buildTypes { release { productFlavors.vanilla { //your configuration for vanilla flavor with release buildType } } debug { productFlavors.chocolate{ //your configuration for chocolate flavor with debug buildType } } }