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文件及定义宏
#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语法。