2012年11月28日星期三
一直想用调试的方式来弄清楚android内部运行的流程,我们都知道android的开发是包括java层和native层的,肯定也会涉及java代码和c/c++代码的调试。今天花了点时间对这两个方面做了下尝试。
1.环境
为了省事,今天下载了google官方提供的最新的开发工具(ADT bundle for mac),直接集成好了jdt/cdt/adt。
![](https://img-my.csdn.net/uploads/201211/28/1354105231_7508.png)
NDK也是直接下载的最新的:
![](https://img-my.csdn.net/uploads/201211/28/1354105271_2548.png)
平台用的是昨天编译的2.3.5
1.step by step
为了方便,直接使用ndk自带的工程
a).导入hellojni
![](https://img-my.csdn.net/uploads/201211/28/1354105304_4376.png)
![](https://img-my.csdn.net/uploads/201211/28/1354105331_1487.png)
b).进入hellojni目录编译native代码
![](https://img-my.csdn.net/uploads/201211/28/1354105362_6872.png)
(具体参见NDK中的doc)
c).在eclilpse中设置ndk
![](https://img-my.csdn.net/uploads/201211/28/1354105386_7103.png)
d).编译并安装apk
![](https://img-my.csdn.net/uploads/201211/28/1354105425_6467.png)
![](https://img-my.csdn.net/uploads/201211/28/1354105448_4460.png)
e).设置debug configuration
-------------native-----------------
![](https://img-my.csdn.net/uploads/201211/28/1354105506_9258.png)
选中当前的project
![](https://img-my.csdn.net/uploads/201211/28/1354105539_5564.png)
添加当前source path
![](https://img-my.csdn.net/uploads/201211/28/1354105567_4885.png)
debug打勾
![](https://img-my.csdn.net/uploads/201211/28/1354105588_7951.png)
close掉
------------设置断点-----------------
随便设置几个断点
![](https://img-my.csdn.net/uploads/201211/28/1354105630_5846.png)
![](https://img-my.csdn.net/uploads/201211/28/1354105657_6918.png)
选中这个项目,右鍵debug as,使用前面配置的configuration启动debug
![](https://img-my.csdn.net/uploads/201211/28/1354105704_3704.png)
-------------java-----------------
选中相应进程点小蟑螂图标
![](https://img-my.csdn.net/uploads/201211/28/1354105806_9180.png)
回到debug视图
![](https://img-my.csdn.net/uploads/201211/28/1354105889_3258.png)
在emulator 中重新运行hellojni
就会触发刚才的断点。
![](https://img-my.csdn.net/uploads/201211/28/1354106259_5360.png)
![](https://img-my.csdn.net/uploads/201211/28/1354106311_7027.png)
不过好像有时候还不能自动的切换,要自己点选相应的debug栈才能切换。
看它文档的意思,ndk的debug功能应该在近期的版本中进一步增强。
到此就ok了。