赞
踩
使用AS开发的过程中经常使用需要各种调试手段,查看log输出正是其中一种。
Java层输出log很简单,只需要使用Log.x(TAG, String); 即可,AS下Alt+Enter键可以很好的帮我们import所依赖的包,这里不再赘述。值得注意的是,为了调试方便,最好为每个java文件定义一个独立的TAG, adb -s TAG可以很好的过滤我们需要的log。
既然Java层下很容易输出log,那么JNI层呢? 是不是也那么容易? 其实不那么容易,笔者在这里就遇到了点小困难,希望为看到这份博客的人解惑。
(1)首先要包含对应的头文件
#include <android/log.h>
(2) 通过查阅log.h文件,发现函数定义的很有“特色”,使用起来很不方便,于是又做了如下改进:
- #include <android/log.h>
-
- #define TAG "NativeLogTAG"
- #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG,__VA_ARGS__)
- #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG,__VA_ARGS__)
- #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG,__VA_ARGS__)
- #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG,__VA_ARGS__)
- #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG,__VA_ARGS__)
- #define LOGF(...) __android_log_print(ANDROID_LOG_FATAL, TAG,__VA_ARGS__)
(3)然而当尝试编译的时候发现出现如下错误:
undefined reference to `__android_log_print'
其实细心的同学会发现,后面还有link failed之类的错误。显然,这里是因为没有连接对应的库造成的。
只需要在编译的时候使用-l连接对应的库就OK了,那么这就需要需改Android.mk文件。
LOCAL_LDLIBS := -llog
到此就可以使用定义的宏输出log了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。