【发布时间】:2018-05-08 18:34:32
【问题描述】:
在我的 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);
}
问题是,当我以风味 2 或 3 编译和运行代码时,getSecret() 返回“flavor_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 并且没有定义标志变量。
【问题讨论】:
标签: android android-ndk