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