最近在做android jni的開發(fā)剔猿,需要輸出一些log方便調(diào)試分析問題视译,但是jni層里不能像純android開發(fā)一樣直接Log.v("xxx",xxx)
,而使用C中常用的printf
也不起作用。下面將在網(wǎng)上找到的方法归敬,經(jīng)過驗證整理出來酷含。
在jni的C++層打印log信息的步驟
- 1.在Android.mk文件中加入:
LOCAL_LDLIBS := -llog
- 2.在要使用LOG的cpp文件中加入:
#include <android/log.h>
- 3.直接使用
__android_log_print
函數(shù), 代碼舉例:
char * name = "mronion";
__android_log_print(ANDROID_LOG_INFO, "lclclc", "my name is %s\n", name); //log i類型
如下圖可以在logcat上看到輸出結(jié)果:my name is mronion
改進
直接使用__android_log_print
太麻煩了,我們可以定義一些log的方法汪茧,上述第二步改為:
#include <android/log.h>
#define TAG "projectname" // 這個是自定義的LOG的標識
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) // 定義LOGD類型
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) // 定義LOGI類型
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__) // 定義LOGW類型
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__) // 定義LOGE類型
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__) // 定義LOGF類型
使用舉例:
char * name = "mronion";
LOGD("my name is %s\n", name );
該寫法就類似于平時android開發(fā)時打log的寫法椅亚,是不是親切很多。