当前位置:   article > 正文

JNI编程之打印log_java jni 打印log

java jni 打印log

使用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文件,发现函数定义的很有“特色”,使用起来很不方便,于是又做了如下改进:

  1. #include <android/log.h>
  2. #define TAG "NativeLogTAG"
  3. #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG,__VA_ARGS__)
  4. #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG,__VA_ARGS__)
  5. #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG,__VA_ARGS__)
  6. #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG,__VA_ARGS__)
  7. #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG,__VA_ARGS__)
  8. #define LOGF(...) __android_log_print(ANDROID_LOG_FATAL, TAG,__VA_ARGS__)

如何通过调用对应的宏即可输出各种级别的log。TAG根据具体需要再行定义即可。


(3)然而当尝试编译的时候发现出现如下错误:

undefined reference to `__android_log_print'

其实细心的同学会发现,后面还有link failed之类的错误。显然,这里是因为没有连接对应的库造成的。


只需要在编译的时候使用-l连接对应的库就OK了,那么这就需要需改Android.mk文件。

LOCAL_LDLIBS    := -llog

注意这条语句一定要处在 include $(CLEAR_VARS) 之后。


到此就可以使用定义的宏输出log了。



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/728976
推荐阅读
相关标签
  

闽ICP备14008679号