如何调试跟踪Android源代码
Android平台代码很多,关系也很复杂,通常我们调试程序的时候是无法跟踪到Android framework code里的,如果能调试跟踪Android source code将给我们这些初学者带来很多便利,本文将给出一个调试跟踪Android source code 的方法。
1. 首先,得到Android 源代码(可参考之前的文章--如何获取Android源代码并编译.doc),并且编译,得到output file,在(Android source)/out目录下,也可通过别的途径获取Android source code (以androidsrc.tgz为例) 和别人编译好的 output file(out.tgz)

2. 解压缩这两个 tgz 文件,并把解压出来的out 目录放到 myandroid 目录下,如下图所示。
3. 拷贝 myandroid\development\ide\eclipse\.classpath 到 myandroid\.classpath.
4. 拷贝 myandroid\out\target\product\generic\*.img 到 {Android SDK}\tools\lib\images 并且覆盖源文件.
5. 运行{Android SDK}\tools目录下的 emulator.exe.
6. 运行{Android SDK}\tools目录下的 ddms.bat。你可以看到下面的窗口,里面会列出当前emulator里跑的进程:

7. 启动 eclipse ,按照这个步骤 File->New->Java Project (不是 Android Project!) ->Create project from existing source 选到 myandroid 目录 .

8. 在经过长时间等待之后,Android source code将被导入project,正常情况下应该没有error,但是会有很多warning,如果有error后面的debug将不会成功,原因可能是output file ,out.tgz在解压得过程中出错,重新copy out.tgz,或者完整拷贝 out/ 目录到本地目录下,即可解决。

9. 选择想要调试的进程在 DDMS, 用 phone 进程为例,ddms一定要在eclipse之前启动,否则eclipse启动的时候也会启一个ddms,会造成冲突。
10. 在eclipse里, Run->Debug Configuration->Remote Java Application->New, 设置 Connection port to 8700 (DDMS’s 默认端口,你可以改变它).
11. 设置断点在source code,然后就可以像往常一样进行调试了。



myandroid\out\target\product\generic\*.img 到 {Android SDK}\tools\lib\images
这个{Android SDK} 指的是编译的sdk吧?(out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86目录下)
但是我并没用看到\tools\lib\ 下面有images目录?
查看windos平台的sdk也没用这个目录 是怎么回事?
@罗威
可能你用的新版本,这样你可以到{Android SDK}\platforms\android-xx\images
根据你的版本放在不同的android-xx目录下。
我想用这个方法跟踪联系人应用,在Emulator里打开了联系人,在DDMS里应该选择哪个进程呢?我怎么找不到一个com.android.contact的进程?
我记得好像联系人这个是跟com.andorid.phone共用进程吧。
@转烛
博主您好,我看您这篇文章应该是在windows下面操作(文件夹目录结构,提到exe文件),但是mydroid这个包里有几个文件同名不同大小写,在我把它们从linux复制到windows下面的时候(编译出out文件夹是在linux下做的),windows不区分大小写,把不同大小写的看成同名文件(比如mydroid\bionic\libc\kernel\common\linux\netfilter_ipv6下面就有),导致我无法把整个mydroid包移动到windows。这是我的疑问,请博主解答,谢谢
我使用2.2版本代码时出现下面两个错误:
Project 'froyo' is missing required library: 'out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar'
Project 'froyo' is missing required library: 'out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar'
请问楼主有没有好的办法可以解决?谢谢!
2.1版本也有类似问题,谢谢!
我也有跟Hope Cao一样的问题
@xiangxing
没在2.1 2.2版本上试过。