现在的位置: 首页 > 综合 > 正文

JNI中使用LOGCAT 进行Debug

2018年01月29日 ⁄ 综合 ⁄ 共 1336字 ⁄ 字号 评论关闭
文章目录

在jni的c代码中使用printf函数打印日志不会显示到Logcat,也不会显示到console上。Logcat日志输出需要额外配置。

 

Jni中Logcat的日志输出在log.h中定义,log.h文件目录为:android-ndk-r9/platforms/android-18/arch-arm/usr/include/android/log.h。也就是说每个platforms下都有。

int __android_log_write(int prio, constchar *tag, const char *text)是将Log写到文件中

 

int __android_log_print(int prio, const char*tag,  const char *fmt, ...)是将日志输出到Logcat.

 

Prio是Log的级别,也就是 v,I,e,w啥的,具体定义下面再说。Tag 就是日志的Tag了, fmt是日志输出的信息。

 

Prio的定义:

typedef enum android_LogPriority {

   ANDROID_LOG_UNKNOWN = 0,

   ANDROID_LOG_DEFAULT,    /* onlyfor SetMinPriority() */

   ANDROID_LOG_VERBOSE,

   ANDROID_LOG_DEBUG,

   ANDROID_LOG_INFO,

   ANDROID_LOG_WARN,

   ANDROID_LOG_ERROR,

   ANDROID_LOG_FATAL,

   ANDROID_LOG_SILENT,     /* onlyfor SetMinPriority(); must be last */

} android_LogPriority;

枚举是int值不用解释吧。

使用方法:

参照ndk自带的例子Plasma.

1.在需要输出日志的.c文件中导入.h文件及定义宏

#include <android/log.h>

#define LOG_TAG   "libplasma"

#define 
LOGI
(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)

#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

 

这个是定义了i和e的宏,举一反三 其他的也就会了。

2.使用宏进行日志输出

很简单上了代码 一看就懂,就是调用了下宏

LOGE("AndroidBitmap_getInfo()failed ! error=%d", ret);

 

3.在.mk文件中引用日志库

LOCAL_PATH :=
$(call my-dir)

 

include
$(CLEAR_VARS)

 

LOCAL_MODULE   := plasma

LOCAL_SRC_FILES := plasma.c

LOCAL_LDLIBS   := -lm -llog -ljnigraphics

 

include $(BUILD_SHARED_LIBRARY)

 

-llog 就表示引入了liblog.so这个链接库LOCAL_LDLIBS 的用法请查看Android.mk语法。

抱歉!评论已关闭.