版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiejingguo/article/details/79754645
CMake配置事项
- Android Studio的一个module下可以有多个CMakeLists.txt文件,但是顶层CMakeLists.txt文件就只有一个,可以通过该module层下的build.gradle来指定。
android {
externalNativeBuild {
cmake {
path "CMakeLists.txt"//在这里设置的就是顶层CMakeLists.txt的路径
}
}
}
在顶层CMakeLists.txt文件中又可以通过ADD_SUBDIRECTORY(子目录路径)
添加构建子目录,当调用到该命令时就会去执行子目录下CMakeLists.txt文件,执行成功后再返回。
- 设置log的开关
//在build.gradle文件中设置开关
externalNativeBuild {
cmake {
cppFlags "-DDebug"
}
/**
如果是ndk-build编译的话就改写如下
ndkBuild {
cFlags "-DDebug"
//或者cppFlags "-DDebug"
}
*/
}
-D 命令就是宏定义,这里我们宏定义了一个 Debug。接下来我们在原生代码里面我们就可以根据是否定义了这个宏来决定是否输出日志。代码如下:
//native-lib.cpp文件如下
#include <jni.h>
#include <string>
#ifdef Debug
#include <android/log.h>
#define LOG_TAG "来自JNI:"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#endif
extern "C"
JNIEXPORT jstring
JNICALL
Java_com_test_example_myapplication_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
#ifdef Debug
LOGE("我在native-lib.cpp中");
#endif
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
还要添加日志库并且链接上目标库
//若是用CMake编译则在CMakeLists.txt文件中
find_library( log-lib log )
target_link_libraries( native-lib ${log-lib} )
//若是用ndk-build编译则在Android.mk文件中
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := native-lib.c
LOCAL_LDLIBS := -llog //在目标模块中添加日志库
include $(BUILD_SHARED_LIBRARY)
- 为了确保 CMake 可以在编译时定位您的标头文件,您需要将 include_directories() 命令添加到 CMake 构建脚本中并指定标头的路径:
add_library(...)
# Specifies a path to native header files.
include_directories(src/main/cpp/include/)
- 列表内容