1、主机环境要求php
要顺利编译 Android 源代码,硬件环境和操做系统都必须知足必定的条件。官方推荐的硬件环境配置是:html
由上可见,编译 Android 源代码所需的硬件环境要求仍是比较高的,但笔者使用 Mac 系统,在克隆出一块100G 的空间后,迁出并编译完 Android 源代码,仍然留有10几 G 的剩余空间,可见官方推荐配置只是建议,并不是强制要求。java
对于操做系统,Android 能够在 GNU/Linux 或 Mac 操做系统上编译,但编译不一样的 Android 版本对操做系统的要求也不一样,具体要求以下:python
GNU/Linux:android
Mac OS (Intel/x86):git
2、安装 VirtualBoxubuntu
编译 Android 源代码要求必须使用 GNU/Linux 操做系统,对于条件容许的读者来讲,最方便的方式莫过于直接基于 Ubuntu/Mac系统进行操做。若是是使用 Windows 操做系统的读者,咱们也有办法解决,能够先在 Windows 操做系统上安装虚拟机软件,而后再基于此虚拟机软件上安装 Ubuntu 操做系统。xcode
VirtualBox 是由 Oracle(甲骨文)公司提供的一款开源、免费的虚拟机软件,与其它虚拟机软件相比更轻巧、更新速度快、运行速度更快,有 Windows、OS X、Linux、Solaris等版本。读者能够从如下网址直接下载:https://www.virtualbox.org/wiki/Downloads,安装界面以下图所示[2],安装过程按照软件界面提示操做便可。缓存
成功安装 VirtualBox 后,运行它,点击界面左上角的“新建(N)”按钮,便可新建虚拟机。在“虚拟电脑名称和系统类型”界面中,选择类型为 Linux,版本为 Ubuntu (64-bit),以下图所示。在建立虚拟机时,内存和硬盘尽可能选择大一些,此处笔者设置内存为2G,而硬盘空间设置为100G[3]。bash
3、安装 Ubuntu
Ubuntu(乌班图)是一个以桌面应用为主的免费开源的 Linux 操做系统,应用很是普遍,有32位和64位两种版本,读者从如下网址能够下载:https://www.ubuntu.com/download/desktop。
使用虚拟机的好处是能够直接从下载好的 ISO 映像文件安装 Ubuntu 系统。在 VirtualBox 中选择建立好的虚拟机,点击“设置(S)”按钮,在弹出的设置窗口中,切换到存储标签页,再在 IDE 控制器属性的虚拟光驱中,选择下载的 Ubuntu 映像文件[4],以下图所示。设置完成后,单击“启动(T)”按钮,便可在虚拟机中安装 Ubuntu。
Ubuntu(乌班图)是一个以桌面应用为主的 Linux 操做系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“个人存在是由于你们的存在”,是非洲传统的一种价值观,相似华人社会的“仁爱”思想。Ubuntu 基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu 发行版放弃了 Gnome 桌面环境,改成Unity,与Debian的不一样在于它每6个月会发布一个新版本。Ubuntu 的目标在于为通常用户提供一个最新的、同时又至关稳定的主要由自由软件构建而成的操做系统。Ubuntu 具备庞大的社区力量,用户能够方便地从社区得到帮助。2013年1月3日,Ubuntu 正式发布面向智能手机的移动操做系统。
4、搭建 Android 编译环境
前面咱们讲解了 VirtualBox 虚拟机的安装,以及如何在虚拟机上安装 Ubuntu 操做系统的相关知识。下面咱们将讲解编译 Android 平台所需的工具和具体的编译方法。
4.1 编译环境搭建
在 Ubuntu 中编译 Android 平台,首先须要安装配置以下工具[5]:
$ sudo apt-get update $ sudo apt-get install openjdk-8-jdk
$ sudo update-alternatives --config java $ sudo update-alternatives --config javac
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ libgl1-mesa-dev libxml2-utils xsltproc unzip python-networkx
$ wget -S -O - http://source.android.com/source/51-android.rules | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
经过以上步骤,咱们即完成了对 Ubuntu 操做系统上 Android 编译环境的搭建,下面继续讲解 Mac 系统的环境搭建。
因为 Mac 操做系统默认大小写不敏感,而 Android 源代码所使用的版本管理工具 git 要求工做在大小写敏感的环境里,基于此,若是读者如想在 Mac 系统上编译 Android 源代码,需作以下设置:
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg
后续如需修改该磁盘映像的大小,可经过如下命令完成
# hdiutil resize -size <新的磁盘大小>g ~/android.dmg.sparseimage
上述步骤建立的磁盘映像必须挂载后才能访问,编辑 ~/bash_profile脚本,在文件的最后添加以下工具函数
# 挂载android 磁盘映像 function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; } # 卸载 android 磁盘映像 function umountAndroid() { hdiutil detach /Volumes/android; }
这样,每次系统重启后,只需在终端窗口执行 mountAndroid 便可挂载上述步骤建立的磁盘映像,执行 umountAndroid 便可卸载磁盘映像。若是不想每次都这么麻烦地输入这些命令,也能够在 ~/.bash_profile 脚本的最后再加上 mountAndroid,以下图所示。
$ xcode-select --install
从如下网址下载相应的版本安装:https://www.macports.org/install.php
安装完成后,确保在环境变量 PATH 中,/opt/local/bin 必须出如今/usr/bin 以前(/opt/local/bin 为 MacPorts 的安装路径),添加如下脚本到 ~/.bash_profile 中
export PATH=/opt/local/bin:$PATH
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
Mac 系统默认的 gmake 版本是3.82,但此版本中有 bug,会致使编译 Android 源代码失败,因此咱们必须先将 gmake 版本回退到3.81
编辑 /opt/local/etc/macports/sources.conf 文件,在 rsync 一行上边添加以下代码
file:///Users/Shared/dports
接着在终端窗口中执行如下命令建立目录
$ mkdir /Users/Shared/dports
而后按顺序执行如下命令完成 gmake 的安装
$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/ $ portindex /Users/Shared/dports $ sudo port install gmake @3.81
Mac 操做系统上默认容许同时打开的文件描述符数限制较低,而 Android 源代码编译时会启动大量线程进行并行编译,其打开的文件描述符可能超过此限制致使编译失败,编辑 ~/.bash_profile 加入以下命令可解决此问题
# 设置容许同时打开的文件数量为1024 ulimit -S -n 1024
至此,咱们就完成了对 Mac 系统上 Android 平台编译环境的搭建,接下来咱们将讲解源代码下载和编译。
[1] 笔者写此书时最新的 Android 版本为7.1,最新 Ubuntu 版本为16.04.1,后续如无特殊说明,均以这两个版本为例。
[2] 笔者使用的是 Mac 操做系统演示安装过程,其它操做系统上安装 VirtalBox 的过程与此相似。
[3]虚拟机建立后,内存仍能够再调整,但硬盘空间没法再设置,在宿主机容许的状况下尽可能设置大一些。读者也无需担忧空间浪费,虚拟机的磁盘空间是动态分配的,实际使用多少就是多少,最大不超过此处设置。
[4] 本书中使用 ubuntu-16.04.1-desktop-amd64.iso
[5] 此处仅讲解编译 Android 7.1所需的环境,读者如想编译其它版本,可自行参考http://source.android.com/source/initializing.html