首页 > Android > 如何调试跟踪Android源代码

如何调试跟踪Android源代码

2009年9月18日 转烛 发表评论 阅读评论

  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,然后就可以像往常一样进行调试了。

分类: Android 标签: , , ,
  1. 罗威
    2010年1月26日15:37 | #1

    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也没用这个目录 是怎么回事?

  2. 转烛
    2010年1月26日16:15 | #2

    @罗威
    可能你用的新版本,这样你可以到{Android SDK}\platforms\android-xx\images
    根据你的版本放在不同的android-xx目录下。

  3. robot
    2010年4月30日16:01 | #3

    我想用这个方法跟踪联系人应用,在Emulator里打开了联系人,在DDMS里应该选择哪个进程呢?我怎么找不到一个com.android.contact的进程?

  4. 转烛
    2010年4月30日18:06 | #4

    我记得好像联系人这个是跟com.andorid.phone共用进程吧。

  5. figo
    2010年7月29日10:56 | #5

    @转烛
    博主您好,我看您这篇文章应该是在windows下面操作(文件夹目录结构,提到exe文件),但是mydroid这个包里有几个文件同名不同大小写,在我把它们从linux复制到windows下面的时候(编译出out文件夹是在linux下做的),windows不区分大小写,把不同大小写的看成同名文件(比如mydroid\bionic\libc\kernel\common\linux\netfilter_ipv6下面就有),导致我无法把整个mydroid包移动到windows。这是我的疑问,请博主解答,谢谢

  6. 2010年8月7日16:07 | #6

    我使用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版本也有类似问题,谢谢!

  7. xiangxing
    2010年9月9日18:30 | #7

    我也有跟Hope Cao一样的问题

  8. 转烛
    2010年9月9日19:06 | #8

    @xiangxing
    没在2.1 2.2版本上试过。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.