在Android里添加自己的log函数
16lz
2021-01-23
在调试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__在打印函数名时会打印这个函数所在的文件的全路径
更多相关文章
- Android通知MediaScanner扫描指定的文件
- android中XML文件系列(一)—Drawable中的XML
- android XMLPullParser读取xml文件
- Android压缩文件(压缩目录)
- android 从文件制定位置读取数据
- Android 文件缓存方法
- android http上传文件
- 深入分析android中用SAX解析XML文件并纠错