前文主要讲解了 Android 编译环境的搭建,接下来咱们正式开始 Android 源代码的编译,主要涉及两部份内容:源代码的下载和源代码编译。html
1、Android源代码下载android
1) 配置 Git 信息git
将本身的姓名和邮箱信息配置到 Git 中,若是要使用 Gerrit 代码审查工具,邮箱必须是 Google 帐号。[1]api
$ git config --global user.name "你的姓名" $ git config --global user.email "你的邮箱"
2) 安装 Repobash
Android 源代码很是庞大,经过 Git 版本管理工具分红了 art、bionic、dalvik、frameworks 等多个代码仓库,若是分别使用 Git 逐个获取代码显示很麻烦,而 Repo 就是一个用来统一管理这些代码仓库的 Python 脚本工具,经过它能够很方便地同步 Android 源代码。服务器
使用 curl 工具下载 Repo 脚本文件并更改运行权限架构
$ mkdir ~/bin $ PATH=~/bin:$PATH[2] $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
3) 建立源代码存放目录curl
建立 Android 源代码存放目录,若是是在 Mac 操做系统上,该目录须要大小写敏感的文件系统中建立,请参考前文讲解的建立大小写敏感的磁盘映像一节内容。ionic
$ mkdir mydroid $ cd mydroid
4) 初始化 Repo 工做目录工具
执行如下命令下载最新 Android 源代码的 manifest 信息,默认下载的是 master 分支,若是要下载其它分支的信息,须要指定 -b 参数,如下命令所示是下载最新的 android-7.1.1_r6分支[3]。初始化完成后即在当前目录自动建立 .repo 目录,里面已经包含全部必需的信息。
$ repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.1_r6
5) 最后执行如下命令便可开始下载 Android 的源代码
$ repo sync
Android 的整个源代码超过 50G,下载过程很是漫长。另外,因为国人都知道的缘由,以上过程必须配置代理服务器。
2、Android源代码编译
Android 源代码下载完成后,便可开始编译。若是须要移植,则须要进行不少设置和修改。但若是只是搭建一个模拟环境,编译时,只需保持默认设置便可。进入 Android 源代码所在的目录,按照如下的步骤便可开始编译。
1) 初始化编译环境
$ source build/envsetup.sh
或者将 source 用 . 代替也能够
$ . build/envsetup.sh
2) 选择目标配置
编译配置的类型说明以下:
类型 | 目的 |
---|---|
user | 生产版本,具备有限的访问权限 |
userdebug | 调试版本,和生产版本相似,但具备 root 权限和可调试性 |
eng | 开发版本,带有额外的调试工具 |
市面大多数手机都采用 arm 架构,若是但愿编译后的 img 文件能够刷到手机上,须要使用带 arm 标识的配置,以下
$ lunch aosp_arm-eng
笔者后续将讲解如何用模拟器加载编译生成的 img 文件,并使用 HAX(Intel Hardware Accelerated Execution)[4]加速模拟器运行,因此此处使用 x86的配置
lunch aosp_x86_64-eng
3) 开始编译
直接执行 make 命令便可开始编译,make 命令后面的 -jN 表示启用多少个并行任务同时进行编译
$ make -j4
在笔者的编译环境下,编译结果以下图所示。
第一次完整编译会很是耗时,笔者使用的是 Mac 系统、i7的CPU、8G的内存、固态硬盘,但仍然用了3个多小时。后续若是对源代码作一些修改,由于使用了前面的一些编译结果,再次编译的时间就不会这么长。若是要确保修改的结果会被编译进去,可使用如下命令将前面的编译结果所有清除,但再次编译又须要经历漫长的等待。
$ make clobber
Android 源代码编译的产物中最重要的是三个镜像文件,它们都位于 /out/target/product/<product_name>/ 目录下,分别是:
[1] Git 的配置信息可在 ~/.gitconfig 文件中看到。
[2] 此处设置只对当前的终端窗口有效,如想长期有效,在 Mac 系统上需在 ~/.bash_profile 中设置,而 Ubuntu 系统则需在 ~/.bashrc 中设置。
[3] Android 源代码的标签和分支信息可在如下网址查看:http://source.android.com/source/build-numbers.html#source-code-tags-and-builds
[4] Intel 公司开发的一种硬件辅助虚拟化引擎技术,能够缩短 Android 模拟器的启动时间,笔者新试使用前和使用后的启动时间大概从5分钟缩短到30秒,效果很是明显。