1.2.3 利用Eclipse调试system_process

本节将介绍如何利用Eclipse来调试Android Java Framework的核心进程system_process。

1.配置Eclipse

首先要下载Android SDK,下载地址为http://developer.android.com/sdk/index.html。在Linux环境下,该网站截图如图1-6所示。

1.2.3 利用Eclipse调试system_process - 图1

图 1-6 Android SDK下载网页截图

笔者下载的是Linux系统上的SDK。解压后的位置在/thunderst/disk/anroid/android-sdk-linux_86下。

然后要为Eclipse安装ADT插件(Android Development Tools),步骤如下:

单击Eclipse菜单栏Help下的Install New Software,输入Android ADT下载地址:https://dl-ssl.google.com/android/eclipse/,然后安装其中的所有组件,并重启Eclipse。

单击Eclipse菜单栏Preferences下的Android一栏,在右边的SDK Location文本框中输入刚才解压SDK后得到的目录(笔者设置的为/thunderst/disk/anroid/android-sdk-linux_86),最终结果如图1-7所示。

1.2.3 利用Eclipse调试system_process - 图2

图 1-7 SDK安装示意图

单击Eclipse菜单栏Window下的Android SDK Manager,弹出一个对话框,如图1-8所示。

在图1-8中选择下载其中的Tools和对应版本的SDK文档、镜像文件、开发包等。有条件的读者可以将Android 4.0.3和Android 4.0对应的内容及Tools全部下载下来。

1.2.3 利用Eclipse调试system_process - 图3

图 1-8 Android SDK Manager对话框

2.使用Coffee Bytes Java插件

Coffee Bytes Java是Eclipse的一个插件,用于对代码进行折叠,其功能比Eclipse自带的代码折叠功能强大很多。在研究大段代码时,该插件的作用非常明显。此插件的安装和配置步骤如下:

单击Eclipse菜单栏Help下的Install New Software,在弹出的对话框中输入http://eclipse.realjenius.com/update-site,选择安装这个插件即可。

单击Eclipse菜单栏Window下的Preference,在左上角输入Folding进行搜索,结果如图1-9所示。

1.2.3 利用Eclipse调试system_process - 图4

图 1-9 Coffee Bytes Java插件配置

在图1-9所示的对话框中,要先勾选Enable folding选项,然后从Select folding to use框中选择Coffee Bytes Java Folding(见图1-9中的黑框)。图1-9右下部分的复选框用来配置此插件的代码折叠功能。读者不妨按照图1-9所示来配置它。使用该插件后的示意图如图1-10所示。

1.2.3 利用Eclipse调试system_process - 图5

图 1-10 Coffee Bytes Java插件的使用示例

从图1-10中可看到,使用该插件后,代码中所有分支基本上都可以折叠起来,该功能将帮助开发人员集中精力关注自己所关心的分支。

3.导入Android源码

注意,导入源码必须在编译完整个Android源码后才可以实施,其步骤如下:

复制Android源码目录/development/ide/eclipse/.classpath到Android源码根目录。

打开Android源码根目录下的.classpath文件。该文件是供Eclipse使用的,其中保存的是源码目录中各个模块的路径。由于我们只关心Framework相关的模块,因此可以把一些不是Framework的目录从该文件中注释掉。同时,去掉不必要的模块也可加快Android源码导入速度。图1-11所示为该文件的部分内容。

1.2.3 利用Eclipse调试system_process - 图6

图 1-11 .classpath文件的部分内容

另外,在Eclipse环境中,一些不必要的模块会导致后续Android源码编译失败。笔者共享了一个已经配置好的.classpath文件,读者可从http://download.csdn.net/detail/innost/4247578处下载并直接使用。

单击Eclipse菜单栏New下的Java Project,弹出如图1-12所示的对话框。设置Location为Android4.0源码所在的路径。

1.2.3 利用Eclipse调试system_process - 图7

图 1-12 导入Android源码示意图

由于Android 4.0源码文件较多,导入过程会持续较长一段时间,大概十几分钟。

注意 导入源码前一定要取消Eclipse的自动编译选项(通过菜单栏Project下的Build Project Automatically设置)。另外,源码导入完毕后,读者千万不要清理(clean)这个工程。清理会删除之前源码编译生成的文件,导致后续又得重新编译Android系统。

4.创建并运行模拟器

单击Eclipse菜单栏Window下的AVD Manager,创建模拟器,如图1-13所示。

模拟器创建完毕后即可启动它。

5.调试system_process

调试system_process的步骤如下:

首先编译Android源码工程。编译过程中会有很多警告。如果有错误,大部分原因是.classpath文件将不需要的模块包含了进来。读者可根据Eclipse的提示做相应处理。

在Android源码工程上右击,在弹出的菜单中依次单击Debug As->Debug Configurations,弹出如图1-14所示的对话框,然后从左边找到Remote Java Application一栏。

单击图1-14左上角黑框中的新建按钮,然后按图1-15所示的黑框中的内容来设置该对话框。

1.2.3 利用Eclipse调试system_process - 图8

图 1-13 模拟器创建示意图

1.2.3 利用Eclipse调试system_process - 图9

图 1-14 Debug配置框示意图

由图1-15可知,需要选择Remote调试端口号为8600,Host类型为localhost。8600是system_process进程的调试端口号。Eclipse一旦连接到该端口,即可通过JDWP协议来调试system_process。

配置完毕后,单击图1-15所示对话框右下角的Debug按钮,即可启动system_process的调试。

图1-16所示为笔者调试startActivity流程的示意图。

1.2.3 利用Eclipse调试system_process - 图10

图 1-15 Remote Java Application配置示意图

1.2.3 利用Eclipse调试system_process - 图11

图 1-16 system_process调试效果图

另外,system_process的调试端口号可由DDMS查询,如图1-17所示。

由图1-17可知,在笔者测试的这台机器上,system_process的调试端口号为8611,由于系统有可能因为意外而重启,故system_process的端口号并不固定为8600。读者在调试它的时候最好先通过DDMS确认当前system_process的调试端口号。

1.2.3 利用Eclipse调试system_process - 图12

图 1-17 查询system_process调试端口号