在调试js时,js里面的C++代码用Android本省带有的LOGD等这些log函数无法将log打印到屏幕上,在网上查找到一个解决的方法:

LOGW(a) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)

但是这个log函数只能打印字符串无法打印一个变量的值,这在调试时就很不方便了,受到这个log函数的启发,于是自己写了一个log函数添加到android的系统里.这个函数的功能和printf()函数一样,可以打印你想要的内容。


首先在/system/core/liblog/目录下的logd_write.c中把自己写的log函数的实现写到这里

log函数的实现:

int JSLOG(int prio, char * tag, char * format,...) { va_list ap; char buf[1024]; va_start(ap,format); vsnprintf(buf, 1024, format, ap); va_end(ap); return __android_log_write(prio, tag, buf); } 

再将函数的声明添加到system/core/include/cutils/log.h文件中

或将函数的声明放到system/core/include/android/log.h文件中

(将函数的声明放到上述的两个文件中个那一个都可以,只要在你引用这个函数时加上这个函数的声明的头文件即可)


我又将这个函数进行了一下封装,封装的思想是,原有的JSLOG()这个函数只会打印你输入的信息,不会自动的打印这个log函数所在的函数的函数名和log函数所在文件的行数,如果不进行一下封装,要想打印函数名和log信息所在文件的行数,就的每次在写log时都的重复的将打印函数名的宏和打印行数的宏写上,为了减少重复的工作于是进行了一下封装。

将其写在一个同文件里,详细内容如下:

#ifndef OWNLOG_H #define OWNLOG_H #include <android/log.h> /*如果log函数的声明放到system/core/include/android/log.h目录下这里就应该写上这个头文件*如果是函数声明是放到了system/core/include/cutils/log.h  这个头文件里 这里就要写上 *#include <cutils/log.h>*/ #define JS_LOG  1    //  这里定义JS_LOG这个宏是为了调试时用 宏为1时打印log 否则不打印log                              #if  JS_LOG #define  JS(fmt,...) JSLOG(ANDROID_LOG_WARN, LOG_TAG, "%s (line: %d) " fmt, __FUNCTION__,__LINE__,##__VA_ARGS__) #define LOGW(a) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a) #else #define JS(ftm,...) ((void)0) #define LOGW(a)((void)0) #endif #endif 

__FUNCTION__在打印函数名是不会打印这个函数所在的文件的全路径

__func__在打印函数名时会打印这个函数所在的文件的全路径




更多相关文章

  1. Android通知MediaScanner扫描指定的文件
  2. android中XML文件系列(一)—Drawable中的XML
  3. android XMLPullParser读取xml文件
  4. Android压缩文件(压缩目录)
  5. android 从文件制定位置读取数据
  6. Android 文件缓存方法
  7. android http上传文件
  8. 深入分析android中用SAX解析XML文件并纠错

随机推荐

  1. Andriod 单元测试 Test run failed:Unabl
  2. 编写Android中直接可运行的二进制文件
  3. 编写App的开场Activity
  4. Android 手机上安装并运行 Ubuntu 12.04
  5. android media 播放器
  6. Android瀑布流的实现
  7. Android中JNI的使用之HelloWorld
  8. (连载)Android 8.0 : 系统启动流程之Linu
  9. Android开发(九)| android手势开发
  10. android:动态缩放和旋转图像