本文首发于微信公众号「刘望舒」html
关联系列
Android AOSP基础系列
Android系统启动系列
应用进程启动系列
Android深刻四大组件系列
Android深刻理解Context系列
Android深刻理解JNI系列
Android解析WindowManager
Android解析WMS系列
Android解析AMS系列
Android包管理机制系列
Android输入系统系列前端
做为应用开发,咱们将AOSP源码下载下来后,去查看源码已经足够用,若是想更进一步,能够学习调试源码,这样有助于了解系统源码和原理。调试系统源码的方式有不少种,今天分享出来的是比较适合应用开发的三种,分别是AOSP源码项目调试、导入部分源码调试、新建Android项目调试。java
须要注意的是,这三种方法都不须要整编系统源码,甚至有的方法只须要下载部分源码就能够了,哪一个方法更适合你呢?看完本篇文章就会有答案了。android
这种调试方法的前提是要将AOSP源码下载下来,关于下载AOSP源码,能够查看Android AOSP基础(二)AOSP源码下载这篇文章,另外还须要将AOSP源码导入到Android Studio中,而且配置SDK和JDK,这个在Android AOSP基础(四)Source Insight和Android Studio导入系统源码讲过,由于这篇文章屡次用到配置SDK和JDK这一知识点,再次讲一遍。程序员
因为咱们下载的是9.0的AOSP源码,SDK版本也应该对应为API 28,若是没有就去SDK Manager下载便可。 点击File -> Project Structure-->SDKs配置项目的JDK、SDK。 建立一个新的JDK,这里取名为1.8(No Libraries),删除其中classpath标签页下面的全部jar文件。 ubuntu
接着设置将Android SDK的Java SDK设置为1.8(No Libraries),这样Android源码使用的Java就是Android源码中的。 微信
确保的项目的SDK为源码对应的SDK。 ide
实际上不按以下配置也能够调试源码,可是打开AS时会在Event Log处报错且不能消除提醒,所以这里建议仍是要配置下。 在File-->Project Structure-->Modules中添加一个Android FrameWork: 工具
修改Manifest file等路径为下图中相似的路径,由于咱们常调试这个目录因此这么设置,你也能够设置其余的路径。 学习
在AS最顶部的工具条中选择Edit Configurations
在Run/Debug Configurations弹框中点击左上角的加号,添加一个Android App配置,按下图进行配置:
打开Genymotion,运行Android 9.0的模拟器。 应用程序的启动过程是大部分开发都熟悉的知识点,若是还不熟悉能够看Android深刻四大组件(六)Android8.0 根Activity启动过程(前篇)和Android深刻四大组件(七)Android8.0 根Activity启动过程(后篇)这两篇文章。 本篇文章的调试源码部分都以这个知识点为基础进行调试。 应用程序的启动时会调用ActivityStarter的startActivityMayWait方法,下图是AMS到ApplicationThread的调用链。
ctrl+N 查找类ActivityStarter,在ActivityStarter的startActivityMayWait方法上打断点,也能够在其余地方打断点,好比AMS的startActivity方法,这里只是举一个例子。
点击菜单的Run-->Attach Debugger to Android Process或者上方工具条的Attach Debugger to Android Process图标,
勾选Show all processer,选择system_process,以下图所示。
在Genymotion模拟器中点击Gallery应用,咱们设的断点就会生效,就能够愉快的进行调试了。
第一种方法须要对源码的idegen模块进行单编,生成android.ipr以便于AS导入AOSP所有源码。事实上,咱们日常调试源码也用不到AOSP所有源码,导入部分源码也能够调试。这里导入最经常使用的frameworks/base目录做为举例。
在当前项目File-->New-->Import project,或者关闭当前项目,选择Import project,以下图所示。
选择导入frameworks/base目录,一路Next:
这是AS会列出frameworks/base目录下的全部项目,由于要调试ActivityStarter类,这里只须要导入frameworks/base/services/core/java就能够了。
剩下一路Next就能够了,项目加载进来后,按照本文1.1小节来配置项目的JDK、SDK。接下来的调试步骤和1.3小节是同样的。
若是咱们没有下载源码,或者不想导入那么多源码,也能够新建一个Android项目来进行调试,步骤以下:
这篇文章介绍了3种调试源码的方法,做为应用开发来讲,这三种调试方法就够用了,整体来讲都是大同小异,适合不一样需求的开发人员,按照我我的的理解,最推崇第一种方法,毕竟这种方法一劳永逸。好了AOSP基础系列就讲到这,接下来你能够开始阅读和调试源码了,建议从Android系统启动系列开始。
Android AOSP基础系列
Android AOSP基础(一)VirtualBox 安装 Ubuntu
Android AOSP基础(二)AOSP源码下载
Android AOSP基础(三)Android系统源码的整编和单编
Android AOSP基础(四)Source Insight和Android Studio导入系统源码
Android AOSP基础(五)Android Studio调试系统源码的三种方式