金泰延老师的《Android 框架揭秘》一书第二章即是配置搭建Android开发环境,并讲解了如何在eclipse中调试Android Framework,但是现在大家基本都使用Android Studio开发环境了,那么如在在Android Studio中调试Android Framework呢?实际上关于这个话题很多博文都说的很仔细了,但是本人在参考这些博文过程中有些自己的心得体会也通过此篇博文在这里一并记录吧。
1、下载并编译Andriod 源码
关于下载编译Android源码,这一块只是内容实际上还是比较麻烦的,这个内容可以参考我的另一篇博文Ubantu18.04环境下编译android源码。
2、生成Android Studio工程文件
既然要使用Android Studio(之后简称AS)来调试Android Framework(之后简称AF)源码,那么首先得用AS打开AF,我们知道AF源码在Android源码目录的frameworks文件中,但是用AS直接打开这个源码是不行的,我们得首先生成一个AS能够打开的工程文件。
为了达到这个目的首先cd到Android源码目录,执行下面命令生成idegen.jar
. build/envsetup.sh
mmm development/tools/idegen/
出现如下提示表示执行成功了
然后再执行如下命令生成AS能够打开的工程文件android.ipr以及工程配置文件android.iml
development/tools/idegen/idegen.sh
出现如下提示表示成功
并且在Android源码根目录下生成android.ipr以及android.iml两个文件,有些文章会提到android.iws文件,但是实际上在本博文中这个文件并没有什么用
到这里AS能打开的工程文件android.ipr以及配置文件android.iml这两个文件就生成了,实际上关于这里童鞋们也可以自行参考源码路径下的development/tools/idegen/README 文件。
3、AS导入Android源码
既然已经生成了android.ipr文件,那我么直接用AS打开android.ipr文件呗。先别着急,我们只需要调试AF但是这里生成的android.ipr可是包含了基本上Android源码里的所有模块,那么如果我们就这么打开android.ipr的话,那么等待我们的将是漫长scanning index过程。
那么如何让AS只加载AF模块呢,这里就要用到android.iml这个文件来配置了,打开android.iml文件搜索excludeFolder,我们便能搜索到需要配置的地方
既然这里提供了模板,我们便只需要依葫芦画瓢便可,比如不加载development模块,并只需要添加如下配置即可
<excludeFolder url="file://$MODULE_DIR$/development"/>
由于我们只要加载frameworks模块,所以便可以在这里把所有其它模块都给去掉,然后通过AS打开android.ipr文件发现什么鬼怎么其它模块都还在
在配置过程中,我为此纠结了很久,后面发现在上图Show Options menu的菜单中有一个Show Excluded Files菜单,去掉这个便可只显示frameworks了。
这里我们就成功的通过AS导入了AF模块。
4、调试Android Framework
在导入AF后,便需要考虑调试AF的问题了,这里事先实现了了一个com.example.test模块,其只有一个包含ListView的Activity,我们在AF的AbsListView中打好断点
然后打开模拟器,注意因为我拉取的是android 8.1源码,所以这里的模拟器也是打开的API 27的模拟器,不然可能存在断点找不到的情况,如果用真机调试的话,那更是没戏了。
AF中run -> Attach debugger to android process,选中对应的com.example.test模块,然后在模拟器中打开com.example.test模块,递减ListView便能在Android Studio中捕获到断点,这样便能愉快的进行调试了,由于电脑比较卡这里就不上图了,以后有时间补上吧。
到这里Android Studio中导入并调试Framework的介绍就算是告一段落了。
参考文献
1、如何调试Android Native Framework
2、使用Android Studio调试Android Framework代码
3、Android Studio导入Android源码/调试framework的教程
4、使用Android Studio导入源码
5、将Android系统源码导入Android studio的方法
6、如何调试Android Framework?
7、Android Studio系列(二)使用AS开发/调试整个android系统源代码(不定时更新)