Android-NDK學習記錄3-原生方式列印Logcat
阿新 • • 發佈:2018-11-25
咱們列印日誌,Android通常是列印到logcat中,Android有自己的一套日誌系統,c裡面如果呼叫printf,包括c++中的cout等等都不能列印到logcat中。所以我們需要使用Android提供給我們的日誌庫來列印到logcat中
- CMakeLists.txt引入log庫:
# 用於定位NDK中的庫,比如這裡的Log庫 find_library( # Sets the name of the path variable. #變數名取為log-lib log-lib # Specifies the name of the NDK library that # you want CMake to locate. #找ndk中的log庫,即找ndk中的包為liblog.so log) # 指定關聯到原生庫的庫 target_link_libraries( # Specifies the target library. #我們的庫,與前面的name保持一致 my_native_lib # Links the target library to the log library # included in the NDK. #要連結進來的庫,如上面指定的path ${log-lib})
- 使用logcat列印,需要引入系統庫標頭檔案:
<android/log.h>
- 列印日誌方法:__android_log_print
引數 | 說明 |
---|---|
prio | 日誌級別 |
tag | 標籤 |
text | 文字 |
fmt | C和C++支援的格式化文字,如果使用這種,那麼後面需要再跟一個值 |
通常,將__android_log_print日誌列印給定義到常量中來呼叫,少寫點程式碼。
例子程式碼,如下:
#include <jni.h> //日誌庫 #include <android/log.h> #define TAG "LogTest" //常用的一種方式,通過常量定義好,後面直接使用,就不用每次都列印__android``一長串了 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__) extern "C" JNIEXPORT void JNICALL Java_shixin_ndkdemo_MainActivity_testAndroidLog(JNIEnv *env, jobject instance) { // 列印日誌: 引數:日誌級別、TAG、內容,內容中的值 __android_log_print(ANDROID_LOG_VERBOSE, TAG, "C 列印日誌了"); __android_log_print(ANDROID_LOG_INFO, TAG, "11 %d ", 1); __android_log_print(ANDROID_LOG_WARN, TAG, "%s", "what"); __android_log_print(ANDROID_LOG_ERROR, TAG, "%d", 2); //使用定義方式來輸出 LOGI("11111 %d", 344); LOGI("11111 "); }