update tools studio para descargar configurar android gradle android-ndk cflags

android - tools - Cómo configurar variables según los sabores de gradle



gradle version android studio (2)

Encontré la solución:

Primero en lugar de la def test especifique un nuevo campo para todos los productosFlavors

productFlavors.all { ext.dTest = null }

Entonces este campo se establece en cada sabor (el código no se modifica)

productFlavors { flavorA { dTest = 1 } flavorB { dTest = 2 } }

Y finalmente puedes hacer esto en buildTypes

buildTypes { all { productFlavors { all { ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DTEST="+dTest+" " } } } } debug { minifyEnabled false ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DLOGGING=1 " } } release { minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DLOGGING=0 " } } }

Aquí el archivo completo:

apply plugin: ''com.android.library'' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultPublishConfig "flavorARelease" publishNonDefault true defaultConfig { minSdkVersion 15 targetSdkVersion 17 ndk { moduleName "dTest" ldLibs "log" } } productFlavors.all { ext.dTest = null } productFlavors { flavorA { dTest = 1 } flavorB { dTest = 2 } } buildTypes { all { productFlavors { all { ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DTEST="+dTest+" " } } } } debug { minifyEnabled false ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DLOGGING=1 " } } release { minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DLOGGING=0 " } } } }

Quiero pasar una test variable que establezco de manera diferente por sabor como una definición para el NDK. Pero por alguna razón siempre pasa el valor del último sabor.

Aquí está el build.gradle:

apply plugin: ''com.android.library'' def test android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultPublishConfig "flavorARelease" publishNonDefault true defaultConfig { minSdkVersion 15 targetSdkVersion 17 ndk { moduleName "test" ldLibs "log" } } productFlavors { flavorA { test = 1 } flavorB { test = 2 } } buildTypes { debug { ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DLOGGING=1 -DTEST="+test+" " } minifyEnabled false } release { ndk { if (cFlags == null) { cFlags = "" } cFlags = cFlags + " -DLOGGING=0 -DTEST="+test+" " } minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } } dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) testCompile ''junit:junit:4.12'' compile ''com.android.support:appcompat-v7:23.1.1'' }

Y aquí están las líneas CFLAG del Android.mk generado

build / intermediate / ndk / flavorA / debug / Android.mk:

LOCAL_CFLAGS := -DLOGGING=1 -DTEST=2

Yo esperaba -DTEST=1 aquí

build / intermedios / ndk / flavorB / debug / Android.mk:

LOCAL_CFLAGS := -DLOGGING=1 -DTEST=2

Entonces, ¿dónde está mi error? ¿O cómo puedo lograr mi objetivo? Tenga en cuenta también que el problema real es más complejo y, si es posible, quiero definir esas definiciones en el segmento "buildTypes".


Puedes usar buildConfigField

productFlavors { demo { buildConfigField "int", "FOO", "1" buildConfigField "String", "FOO_STRING", "/"foo1/"" } full { buildConfigField "int", "FOO", "2" buildConfigField "String", "FOO_STRING", "/"foo2/"" } }