- 深入解析Android 虚拟机
- 钟世礼
- 2063字
- 2020-06-28 05:36:02
1.1 获取Android源码
要想研究Android系统的源码,需要先获取其源码。目前市面上主流的操作系统有Windows、Linux、Mac OS的操作系统,由于Mac OS源自于Linux系统,因此本书将讲解分别在Windows系统和Linux系统中获取Android源码的知识。
1.1.1 在Linux系统获取Android源码
在Linux系统中,通常使用Ubuntu来下载和编译Android源码。由于Android的源码内容很多,Google采用了Git的版本控制工具,并对不同的模块设置不同的Git服务器,可以用repo自动化脚本来下载Android源码,下面介绍获取Android源码的过程。
(1)下载repo。
在用户目录下创建存放repo的bin文件夹,并把该路径设置到环境变量中去,具体命令如下所示:
$ mkdir ~/bin $ PATH=~/bin:$PATH
下载用于执行repo的repo的脚本,具体命令如下所示:
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
设置可执行权限,命令如下所示:
$ chmod a+x ~/bin/repo
(2)初始化一个repo的客户端。
在用户目录下创建一个空目录,用于存放Android源码,命令如下所示:
$ mkdir AndroidCode $ cd AndroidCode
进入到AndroidCode目录,并运行repo下载源码,下载主线分支的代码,主线分支包括最新修改的bug,以及并未正式发布版本的最新源码,命令如下所示:
$ repo init -u https://android.googlesource.com/platform/manifest
下载其他分支,建议下载正式发布的版本,可以通过添加-b参数来下载,例如下载Android 4.3正式版的命令如下所示:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.3_r1
在下载过程中会需要填写Name和E-mail,填写完毕之后,选择Y进行确认。最后提示repo初始化完成,这时可以开始同步Android源码了。同步过程非常漫长,需要大家耐心等待。执行下面命令开始同步代码:
$ repo sync
经过上述步骤后,便开始下载并同步Android源码了,界面效果如图1-1所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0013_0001.jpg?sign=1739523476-jB3cZKPiVaftchkWkvl7jiSdWSvKol6U-0-559892f63079b4d859e37ed322fc7e5b)
图1-1 下载同步界面
1.1.2 在Windows平台获取Android源码
在Windows平台获取源码与在Linux上原理相同,但是需要预先在Windows平台上搭建一个Linux环境,此处需要用到Cygwin工具。Cygwin的作用是构建一套在Windows上的Linux模拟环境,下载Cygwin工具的地址如下所示:
http://cygwin.com/install.html
下载成功后会得到一个名为“setup.exe”的可执行文件,通过此文件可以更新和下载最新的工具版本,具体流程如下所示。
(1)启动Cygwin,如图1-2所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0013_0002.jpg?sign=1739523476-2DGD690DYEmH6DbgT8VhL5p3JXmClh4r-0-b5b3159070e9e1d48030461ba9434415)
图1-2 启动Cygwin
(2)单击“下一步”按钮,选择第一个选项:从网络下载安装,如图1-3所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0013_0003.jpg?sign=1739523476-9ZioAlIX4udHkQmntXbaEij60hhRcRQ7-0-d3f52695aae7aa16f3a20300b6893acf)
图1-3 选择从网络下载安装
(3)单击“下一步”按钮,选择安装根目录,如图1-4所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0014_0001.jpg?sign=1739523476-R3Xaoj0n2dAsD5IOZPREahnYpHAvnFHv-0-47fa55930a5db0cacbb4a9486b6955a8)
图1-4 选择安装根目录
(4)单击“下一步”按钮,选择临时文件目录,如图1-5所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0014_0002.jpg?sign=1739523476-21gz7wWZnq7Wpn2PvDOXWh4UTKInjgKe-0-16640a78b2bf3fd86ed4947eac7721b5)
图1-5 选择临时文件目录
(5)单击“下一步”按钮,设置网络代理。如果所在网络需要代理,则在这一步进行设置,如果不用代理,则选择直接下载,如图1-6所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0014_0003.jpg?sign=1739523476-iHgP3YbNUOO6ZnpHoFsopzDYap6dB936-0-0b293b4473f0e5a52f11b285a09e2cf4)
图1-6 设置网络代理
(6)单击“下一步”按钮,选择下载站点。一般选择离得比较近的站点,速度会比较快,如图1-7所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0014_0004.jpg?sign=1739523476-ZaiDO4kbhlBesJGjPvgWPNXmCUIVPXOm-0-d295ce31d147df8a9f715912c2ea505b)
图1-7 选择下载站点
(7)单击“下一步”按钮,开始更新工具列表,如图1-8所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0014_0005.jpg?sign=1739523476-9kcHFSgAtjs79mjR7G2WX3kXO77ZbQty-0-7a9608f5c8111e6a4d00d7214dec61b5)
图1-8 更新工具列表
(8)单击“下一步”按钮,选择需要下载的工具包。在此需要依次下载curl、git、python这些工具,如图1-9所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0014_0006.jpg?sign=1739523476-0Pkh5YC47EFTIsOQN8w8NNBTuf8AwHT0-0-3f428f28c6a5519878eb10cd0644960c)
图1-9 依次下载工具
为了确保能够安装上述工具,一定要用鼠标双击这些图标使之变为Install形式,如图1-10所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0015_0001.jpg?sign=1739523476-fGar8k3XD9t8QFB352HcM6rkZIqb3XXI-0-7846222c08c1c927adcfadb8b02bb3d1)
图1-10 务必设置为Install形式
(9)单击“下一步”按钮,需要经过漫长的等待过程,如图1-11所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0015_0002.jpg?sign=1739523476-uSJ9ILE1RRlhtOIk7irLjPBPJVTkIgG7-0-a59b9e966a796069545ec7f03452add8)
图1-11 下载进度条
如果下载安装成功会出现提示信息,单击“完成”按钮即完成安装。打开安装好的Cygwin后,会模拟出一个Linux的工作环境,然后按照Linux平台的源码下载方法就可以下载Android源码了。
建议读者在下载Android源码时,严格按照官方提供的步骤进行,地址是:http://source.android.com/source/downloading.html,这一点对初学者来说尤为重要。另外,整个下载过程比较漫长,需要大家耐心等待。图1-12是笔者机器的命令截图。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0015_0003.jpg?sign=1739523476-PK9V5DizciRlbqXa7ViYpZfCyyI5dAoL-0-5037b0074631730450ad59e70721f4a2)
图1-12在Windows中用Cygwin工具下载Android源码的截图
1.1.3 Windows获取Android L源码
在作者撰写本书时,Android系统的最新版本是Android L,此版本在Google官方网站的代号为“l-preview”。在Windows系统中获取Android L源码的具体流程如下。
(1)下载Git工具,其官方下载地址是http://www.git-scm.com/downloads,如图1-13所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0016_0001.jpg?sign=1739523476-ZjIIESYqGeBffySaccusjTH7emTX3dK7-0-2ce4255e31489b0c23eac60b70b7e93d)
图1-13 下载Git工具
下载后双击可执行文件进行安装,在安装过程按照默认选项安装即可。
(2)下载并安装TortoiseGit工具,下载地址是https://code.google.com/p/tortoisegit/,如图1-14所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0016_0002.jpg?sign=1739523476-2Pq6YstFkTNbcwA004xW3cMEs6tebCvL-0-2817d863ae08c08600fc96a60c7fd562)
图1-14 下载TortoiseGit工具
下载后双击下载后的可执行文件进行安装,安装过程按照默认选项安装即可。如果读者对英文不敢兴趣,可以下载TortoiseGit的中文版本,笔者安装的就是TortoiseGit中文版。
(3)新建一个保存源码的文件夹,例如“cc”,在文件夹上单击右键,然后选择“Git克隆”命令。
(4)在弹出的“Git克隆”对话框界面中,在“URL”后面的文本框中输入Android L项目下载路径:https://android.googlesource.com/platform/manifest.git,如图1-15所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0016_0003.jpg?sign=1739523476-Fc5YXd0RPMpZm6lgb4KgKvPZtNZcfFBG-0-ef99d210d29ddac5216d994118179c43)
图1-15 输入Android L项目下载路径
(5)单击图1-15中的“确定”按钮开始下载分支信息文件,下载后的文件被保存在“cc”文件夹中,具体目录结构如图1-16所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0017_0001.jpg?sign=1739523476-YE0OEHNGKDLSRvl8RmFrJnCs7TUkqcxz-0-c07ba35de3d387fd4d4d95188ec685a8)
图1-16 分支信息文件
(6)打开文件default.xml,在里面列出了Android L源码的各个文件夹中子文件夹目录的分支信息,具体格式如下所示:
<project path="abi/cpp" name="platform/abi/cpp" groups="pdk"/><project path="art" name="platform/ art"/> <project path="bionic" name="platform/bionic" groups="pdk"/> <project path="bootable/bootloader/legacy" name="platform/bootable/bootloader/legacy"/> <project path="bootable/diskinstaller" name="platform/bootable/diskinstaller"/> <project path="bootable/recovery" name="platform/bootable/recovery" groups="pdk"/> <project path="cts" name="platform/cts" groups="cts"/> <project path="dalvik" name="platform/dalvik"/> <project path="developers/build" name="platform/developers/build"/> <project path="developers/demos" name="platform/developers/demos"/> <project path="developers/docs" name="platform/developers/docs"/> <project path="developers/samples/android" name="platform/developers/samples/android"/>
例如“<project path="bootable/bootloader/legacy" name="platform/bootable/bootloader/legacy"/>”表示在Android L的源码中,存在了一个名为“bootable”的根目录文件夹,而在“bootable”文件夹中又包含了一个名为bootloader”的子文件夹,而在“bootloader”文件夹下又包含了一个名为“legacy”的文件夹。
(7)开始下载Android L源码,在文件夹“cc”上单击右键,然后选择“Git克隆”命令。在弹出界面中输入Android L某个分支的下载路径,例如path=“art”表示“art”,此文件夹的下载地址是:https://android.googlesource.com/a/art.git。然后勾选“分支”复选框,并在后面填写“l-prevew”分支,如图1-17所示。
![](https://epubservercos.yuewen.com/69A01A/11229143603763206/epubprivate/OEBPS/Images/figure_0017_0002.jpg?sign=1739523476-dPHvfiq5FFtrTMyKkbQy4MrQM6gLATBj-0-d3e88c7431b1e1d1b212ce87e7f05687)
图1-17 开始下载“art”文件夹的内容
单击“确定”按钮后将开始下载Android L源码中的“art”文件夹的内容。同理,可以根据default.xml文件提供的路径信息继续下载其他文件夹的内容。