我需要在里面设置一个标志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
to:
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
}
这还不够,标志不会根据构建类型而改变。我发现了一些关于此的信息,上面的代码是我在互联网上阅读的结果。
您对如何使其正常工作有什么建议吗?
Use externalNativeBuild { ndkBuild {
在构建类型内。请注意,标志将被添加到APP_CFLAGS
(即所有模块),而不是LOCAL_CFLAGS
.
构建.gradle:
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.ndkbuildtest"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
ndkBuild {
abiFilters "armeabi-v7a"
arguments "APP_STL:=gnustl_static"
cppFlags "-std=c++11","-frtti","-fexceptions"
}
}
}
buildTypes {
release {
externalNativeBuild {
ndkBuild {
cFlags "-DDEBUG_MODE=0"
}
}
}
debug {
externalNativeBuild {
ndkBuild {
cFlags "-DDEBUG_MODE=1"
}
}
}
}
externalNativeBuild {
ndkBuild {
path "Android.mk"
}
}
}
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := src/main/cpp/native-lib.cpp
include $(BUILD_SHARED_LIBRARY)
本机lib.cpp:
#include <jni.h>
#include <string>
#if DEBUG_MODE
#error "Debug mode enabled!
#endif
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_ndkbuildtest_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)