我需要在 Android.mk
文件中设置一个标志,告诉 C 代码是否处于调试模式。
LOCAL_MODULE := auth
LOCAL_SRC_FILES := auth.c
LOCAL_CFLAGS := -DDEBUG_MODE=0
LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES := auth.h
include $(BUILD_SHARED_LIBRARY)
问题在于我经常会忘记在构建版本和反之时更改值,因此我希望有一种自动完成这个过程的方式。
我尝试将
Android.mk
更改为:LOCAL_CFLAGS := -DDEBUG_MODE
并将build.gradle
更改为以下内容:
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
}
buildTypes {
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ndk {
cFlags = " -DDEBUG_MODE=0 "
}
}
debug {
debuggable true
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ndk {
cFlags = " -DDEBUG_MODE=1 "
}
}
}
sourceSets.main {
jni.srcDirs = ['src/main/none']
jniLibs.srcDirs = ["src/main/libs"]
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
return void
}
这还不够,标志并没有根据构建类型而改变。我在网上找到了一些信息,上面的代码是我读到的结果。
您有关于如何使其正常工作的建议吗?
LOCAL_CFLAGS
是行不通的,因为该标志被添加到APP_CFLAGS
中。但是,在C代码中检查标志对我来说效果很好(我正在使用Gradle插件的2.3.1版本)。 - MichaelLOCAL_CFLAGS := -DDEBUG_MODE=0
,并在C代码中使用# if DEBUG_MODE
进行测试(gradle 2.3.2)。 - fillobottoAPP_FLAGS :=
?我已经添加了一个更完整的示例,适用于2.3.2(如果我运行gradlew assembleDebug
,则会触发#error
,如果我运行gradlew assembleRelease
,则不会)。 - Michael