原文链接,自备梯子:http://ronubo.blogspot.com/2016/01/debugging-aosp-platform-code-with.html
AndroidStudio在开发APP的时候功能非常强大,断点调试也非常方便。但是在进行framework或系统应用开发的时候调试的起来就很不爽了,往往只能在代码中加大量log,再通过log来调试。最近看了一篇歪果仁写的文章讲了如何使用AndroidStudio来调试framework代码,自己尝试了一下,完美解决了上面的问题。这对于调试代码和看一些系统的流程都非常有帮助,因此在这里总结一下,希望能对大家有所帮助。
一、使用AndroidStudio打开Android源码
想要使用AndroidStudio调试framework代码,必须在AndroidStudio中打开Android源码。关于这一步,网上文章也比较多,就不多做介绍了,简单来说就是以下几步,具体可自行百度。
- 编译整套代码
source build/envsetup.sh
lunch xxx
make
- 编译生成android.ipr
mmm development/tools/idegen
./development/tools/idegen/idegen.sh
- 使用AndroidStudio打开编译生成的android.ipr文件
二、使用AndroidStudio来调试framework代码
-
添加一个远程debug配置,设置端口为8700,这个端口就是DDMS的默认调试端口,也可以自己设置其他的端口,但是要与DDMS中的调试端口保持一致
-
下面需要使用DDMS,但是在新版本的AndroidStudio中DDMS的入口已经被删掉了。我们可以在sdk的tools目录下找到并运行monitor这个可执行程序来打开DDMS。
cd your_sdk_path/tools
./monitor
-
点击debug按钮,如果出现下面的提示就说明连接8700端口失败,可以重启AndroidStudio或DDMS后再试。正常的话就可以看到下面连接成功的提示了。
-
在DDMS中选中需要调试的进程,然后在AndroidStudio中添加断点,就可以像调试APP一样调试Framework代码和系统应用了。例如下面我们来调试ActivityManagerService中启动Activity的流程,首先在DDMS中选择我们要调试的进程system_process进程,在ActivityManagerService.java中添加断点,然后在手机上去启动一个Activity,我们就可以发现程序运行到断点就停止了,和我们调试app一样的效果。