1.3 源码阅读
系统源码的阅读有很多种方式,总的来说分为两种:一种是在线阅读;另一种是下载源码到本地用软件工具阅读。下面分别针对这两种阅读方式进行讲解。
1.3.1 在线阅读
Android在线阅读源码的网站有很多,比如http://www.grepcode.com、http://androidxref.com、https://www.androidos.net.cn等,这里推荐使用http://androidxref.com进行在线阅读,这个网址提供了Android 1.6到Android 8.0.0的源码,如图1-2所示。
可以看到图1-2的左侧列出了很多Android版本,单击某个版本进入相应的版本界面,这里以Android 8.0.0版本为例,如图1-3所示。
图1-2 AndroidXRef首页
图1-3 Android 8.0.0版本界面
左边是搜索关键字栏,右边是要搜索的源码目录列表,如果不知道要搜索的关键字具体在哪个目录中,可以单击select all按钮,这样会在所有的目录中进行搜索。下面以搜索MediaPlayer.java为例,MediaPlayer.java在frameworks目录中,因此我们按照图1-4所示进行搜索。
图1-4 搜索MediaPlayer.java
单击搜索到的MediaPlayer.java选项,就可以查看它的源码。如果我们想搜索MediaPlayer.java的start方法,可以在其源码界面进行搜索,也可以增加搜索关键字进行搜索,如图1-5所示。
图1-5 增加搜索关键字
1.3.2 使用Source Insight
下载源码到本地,再用软件工具阅读源码是最好的方式,这样不受网速影响,效率更高,另外在线阅读的网站都是由第三方提供的,并不是很稳定,可能某一天就访问不了了。本地阅读源码可以采用Android Studio、Eclipse、Sublime和Source Insight等软件,这里推荐使用Source Insight。
Source Insight是阅读源码的利器,它是Windows平台下的软件,很多手机开发人员都是采用Source Insight来阅读Android系统源码的。
1.新建源码项目
安装Source Insight软件后,首先要新建源码项目。通过选择菜单项Project→New Project,会弹出如图1-6所示的对话框。
图1-6 新建源码项目
这里我们指定源码项目的名称为Android_8.0.0,然后单击OK按钮打开New Project Settings对话框,如图1-7所示。
图1-7 New Project Settings对话框
单击图1-7箭头指向的Browse按钮来选择本地系统源码所在的路径,比如我的系统源码路径为D:/Android/android-8.0.0_r1。选择好加载路径后单击OK按钮会打开Add and Remove Project Files对话框,在这个对话框中可以向项目中添加整个Android系统源码,也可以只把源码部分目录添加到项目中,以后再根据需要添加其他目录。如果向项目添加整个Android系统源码,加载时会非常慢,这里我们只添加本书相关的源码目录Frameworks、Libcore、Packages、System、Art和Libnativehelper,这几个目录基本上可以满足日常的系统源码阅读需求了,如图1-8所示。
图1-8 Add and Remove Project Files对话框
单击图1-8中箭头指向的Add Tree按钮,就会将选择的目录源码加载到Android_8.0.0项目中,这个时候会弹出加载进度条,加载完毕后单击对话框的“关闭”按钮就可以了。
2.定位文件
Source Insight的定位文件功能十分强大,我们只需要知道源码文件名就可以轻松找到它,比如我们要找MediaPlayer.java,只要在文件搜索框中输入MediaPlayer.java即可,如图1-9所示。
图1-9 定位文件
单击搜索到的MediaPlayer.java选项,就可以打开展示MediaPlayer.java源码的对话框。
3.全局搜索
Source Insight 另一个好用的功能就是全局搜索,默认快捷键为Ctrl+/,或者单击工具栏中类似R的图标,弹出的搜索对话框如图1-10所示。在Search In下拉列表框中可以自定义搜索的范围,比如我们想查找所有Java文件中引用MediaPlayer类的情况,就可以按如图1-10所示进行操作。
图1-10 全局搜索
当然,Source Insight的功能远不止以上几种,相信随着使用次数的增多,你会熟练掌握它的大部分功能,这里就不过多介绍了。