В моем файле Gradle у меня есть
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
productFlavors {
flavorone{
externalNativeBuild.cmake {
cFlags '-DFLAVORONE'
}
signingConfig signingConfigs.flavoronerelease
}
flavortwo{
applicationId "com.mycompany.flavortwo"
versionCode 2
versionName "1.0.1"
externalNativeBuild.cmake {
cFlags '-DFLAVORTWO'
}
signingConfig signingConfigs.flavortworelease
}
flavorthree{
applicationId "com.mycompany.flavorthree"
versionCode 7
versionName "1.0.6"
externalNativeBuild.cmake {
cFlags '-DFLAVORTHREE'
}
signingConfig signingConfigs.flavorthreerelease
}
}
Чтобы добавить определенные переменные в мой файл c, чтобы я мог определить вкус.
в моем файле c у меня есть:
const char* secret;
#ifdef FLAVORONE
const char* secret = "flavor_1_secret";
#elif FLAVORTWO
const char* secret = "flavor_2_secret";
#elif FLAVORTHREE
const char* secret = "flavor_3_secret";
#else
const char* secret = "flavor_1_secret";
#endif
JNIEXPORT jstring JNICALL
Java_com_mycompany_app_MainActivity_getSecret(JNIEnv *env, jobject instance) {
return (*env)-> NewStringUTF(env, secret);
}
Проблема в том, что когда я компилирую и запускаю свой код в flavor 2 или 3, getSecret () возвращает «flavour_1_secret». Я подозреваю, что сделал что-то неправильно, определяя переменные с помощью cflags, но я новичок в работе с NDK, и у меня возникают проблемы с выяснением того, что я сделал неправильно. Я также попробовал:
const char* secret;
#ifdef FLAVORTWO
const char* secret = "flavor_2_secret";
#else
const char* secret = "flavor_1_secret";
#endif
JNIEXPORT jstring JNICALL
Java_com_mycompany_app_MainActivity_getSecret(JNIEnv *env, jobject instance) {
return (*env)-> NewStringUTF(env, secret);
}
и скомпилировал его как flavor2. Я все еще получил аромат 1 секретное возвращение. Таким образом, кажется, что он всегда проходит через else, а переменные флага не определены.