关闭

android 开发中的Log

标签: androidmodulejnistringpathjava
2860人阅读 评论(0) 收藏 举报
分类:

android各层中加入log语句的方法整理如下.

1. Android java代码

(a) 导入log包

   import android.util.Log;

(b) 定义log标签 

private static final String TAG = "DeviceStorageMonitorService";

当然我们也可以定义自己的标签, 以便在从上到下中, 只打印我们自己关注的log

private static final String MYTAG = "MytagTest";

(c) 添加log语句, Log的输出有 : v, i, d, w, e 五种级别


d)打印相应标签的log信息 ,只需要敲入如下命令即可.

logcat -s MytagTest

2.Kernel代码  printk

#include <linux/printk.h>

  #define DBG(x...)   printk(x)

  DBG("%d::%s acc_irq=%d\n",__LINE__, __func__, switch_data->acc_irq);



/* If you are writing a driver, please use dev_dbg instead */
#if defined(DEBUG)
#define pr_debug(fmt, ...) \
    printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#elif defined(CONFIG_DYNAMIC_DEBUG)
/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
#define pr_debug(fmt, ...) \
    dynamic_pr_debug(fmt, ##__VA_ARGS__)
#else
#define pr_debug(fmt, ...) \
    no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif


for example : --------------------------->      pr_debug("kobject: '%s' (%p): %s\n",    kobject_name(kobj), kobj, __func__);



3. NDK开发 jni C代码

    #include<android/log.h>

   static const char *TAG="libgpio"

   #define LOGI(fmt,args...) ((void) __android_log_print(ANDROID_LOG_INFO,TAG,fmt,##args)

  #define LOGD(fmt,args...) ((void) __android_log_print(ANDROID_DEBUG_INFO,TAG,fmt,##args)

   #define LOGE(fmt,args...) ((void) __android_log_print(ANDROID_ERROR_INFO,TAG,fmt,##args)

   LOGI("open path=%s",path)



4.Android c/c++代码

在各种jni, hal层, 驱动层都是c和c++的代码, 在这里插入log, 可以帮助我们找到上层调用下来的参数是多少, 调用的是哪个具体函数等.

(a) 添加tag标签,

#define LOG_TAG "LightSensor"

(b) 引入log库

#include <utils/Log.h>

(c) 加入log语句

在这一步中, 和java不同的是, 不能加入不同的tag标签只能用当前源文件的标签,即 LOG_TAG

LOGI("LightSensor.cpp -> readEvent() : event->value = %d", event->value);

5. 在mk文件中加入log

很多人都不知道, mk文件在运行的时候(也就是android源码编译的时候)也可以输出log, 这大大的方便我们调试编译信息.

在make文件中有两种log级别error和warning :

$(error TEXT...)
$(warning TEXT...)

用error可以准确定位我们需要的log信息, 因为编译会终止, 一般来说终止的地方会有我们的log信息,

warning不会终止在我们的log信息上, 大家可以根据自己的情况来选择.

另外,还可以在编译输出的log语句中加入mk定义的变量信息

举例, 比如我们需要知道libsensors目录下的so编译后叫什么名字, 通过在此目录下的android.mk文件中加入以下代码来输出log:

在LOGCAL_MODULE 的定义之后, 写上

$(error module is $(LOCAL_MODULE))

输出结果:

hardware/sansung/libsensors/Android.mk:27: *** module is Sensors.sansung. Stop.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:404622次
    • 积分:3681
    • 等级:
    • 排名:第8842名
    • 原创:53篇
    • 转载:15篇
    • 译文:0篇
    • 评论:90条
    文章分类
    最新评论