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/)
- 列表內容