Definir buildconfigfield para un sabor específico AND buildType

Tengo 2 sabores, digamos vainilla y chocolate. También tengo los tipos de compilación de Depuración y Liberación, y necesito que Vanilla Release tenga un campo verdadero, mientras que las otras 3 combinaciones deben 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 } 

Estoy teniendo un error, así que supongo que el truco de depuración y liberación no funciona. ¿Es posible hacer esto?

Bucle las variantes y comprobar 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" } } 

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

Por lo que yo sé, para completar lo que quieres lograr, tendrías que 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 } } 

He aquí cómo 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 sido capaz de determinar si ext.fields existe o no en un sabor)

 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 } } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.