Je veux passer une variable test
que j'ai définie différemment par saveur comme définition au NDK. Mais pour une raison quelconque, il passe toujours la valeur de la dernière saveur.
Voici le 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'
}
Et voici les lignes CFLAG de l'Android.mk généré
build/intermediates/ndk/flavourA/debug/Android.mk:
LOCAL_CFLAGS := -DLOGGING=1 -DTEST=2
J'esperais -DTEST=1
ici
build/intermediates/ndk/flavourB/debug/Android.mk:
LOCAL_CFLAGS := -DLOGGING=1 -DTEST=2
Alors où est mon erreur? Ou comment puis-je atteindre mon objectif? Veuillez également considérer que le vrai problème est plus complexe et je veux faire ces définitions dans le segment "buildTypes" si possible.
J'ai trouvé la solution:
D'abord au lieu de def test
spécifiez un nouveau champ pour tous les produits
productFlavors.all {
ext.dTest = null
}
Ensuite, ce champ est défini dans chaque saveur (code inchangé)
productFlavors {
flavorA {
dTest = 1
}
flavorB {
dTest = 2
}
}
Et enfin, vous pouvez le faire dans les 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 "
}
}
}
Voici le fichier complet:
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 "
}
}
}
}
Vous pouvez utiliser buildConfigField
productFlavors {
demo {
buildConfigField "int", "FOO", "1"
buildConfigField "String", "FOO_STRING", "\"foo1\""
}
full {
buildConfigField "int", "FOO", "2"
buildConfigField "String", "FOO_STRING", "\"foo2\""
}
}