JNI中使用LOGCAT 进行Debug

114 篇文章 1 订阅

http://blog.csdn.net/llwdslal/article/details/31733035

在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语法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值