您的位置:首页 > 编程语言

如何在logcat中显示AOSP代码中的打印信息

2011-04-14 15:49 246 查看
最近修改Android Framework目录下的源码,在调试的时候,遇到一个很实现的问题:如何打印调试信息。到网上找了一圈,发现只有这么一篇Blog比较靠谱:/article/5788049.html
,按文中所说方法修改,确实可以输出,不过此处针对的是NDK下的信息在Logcat中的打印,如果用于AOSP中,还有一些问题需要处理。由于本篇并非讨论NDK下的东西,因此,对此不作进一步说明。

通过分析源码,在AOSP中,不需要像上面那位博主那样做,一个最简单的做法就是利用Android Platform提供的LOGI来输出,这是个万金油级别的宏定义,用起来很简单,直接就是LOGI(“要输出的字符串”),如果要输出一些变量的值,比如输出一个int型的变量的值:LOGI(“XXX = %d”, XXX)。而且,不需要考虑镜像是Release还是Debug的。下面我将自己的实现和在模拟器上的验证步骤列出如下:

1、添加#include <utils/Log.h>

如果你新建的是自己的C/C+文件,这是必须的,因为LOGI宏就在这个头文件中定义的,如果是在Android Platform源码中直接修改,一般里面把这活已经干完了。同时记住,在.mk中需要为变量LOCAL_SHARED_LIBRARIES添加一个新成员libutils。

2、添加LOT_TAG宏定义

如果你新建的是自己的C++文件,这不是必须的,但最好加上,除非你始终能记得每条输出所在文件名,因为,通常我们都是将LOG_TAG定义为当前文件名,这样一目了然。而且,一般在当前文件的最开始定义:#define LOG_TAG “文件名”,我一般是这么做的,如果你有其它习惯,自便。

3、在文件中需要关心的位置利用LOGI添加打印信息,不必赘述

4、不是必须的,但很重要,尤其对于利用模拟器进行开发验证的兄弟们

首先,我们make下整个Android源码,这样,新生成的system.img中就有了我们修改后的库了;然后,将我们在Eclipse下新建的对应的系统版本的模拟器系统镜像指定为我们make出来的system.img,并启动,我一般都是这么干的,比如,我在Eclipse下新建了一个名为AndroidEmu_2.3.1的模拟器,在终端的命令行输入命令:

emulator -avd AndroidEmu_2.3.1 -partition-size 128 -system ~/android_source/raycommtech/gingerbread/out/target/product/generic/system.img&

这样启动起来的模拟器系统镜像中就是我们make出来的;最后,运行应用程序,并在logcat中观察打印的信息。

我犯的一个错误,你很可能也要犯的错误:

利用Ecplise启动模拟器后,直接通过adb push命令,用你修改后的库覆盖模拟器中的库

我想大家这样做的理由只有一个:多快好省。但是,一般是行不通的,而且覆盖过程本身就会遇到一些问题,当然,你可以在这个地方找到覆盖时所遇问题的解答:http://blog.csdn.net/wen0006/archive/2010/08/11/5802950.aspx
,文中第1点就是。如果有兄弟按此法如愿以偿,千万别忙着说我是个大忽悠,这多半是因为你替换的库在系统启动的时候没有被加载到内存中,正好你运行程序的时候才加载的,不过,我相信你再次覆盖的时候这招多半不灵光了。最彻底的做法,就是我在上面第4点中的做法,无论何时,都能保证用的是我的东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: