构建编译环境

本部分介绍了如何设置本地工作环境来编译 Android 源代码文件。您必须使用 Linux 或 macOS;目前不支持在 Windows 环境下编译。

要简要了解整个代码审核和代码更新流程,请参阅补丁程序的生命周期

选择分支

针对编译环境的某些要求是由您打算编译的源代码的版本决定的。如需查看可用分支的完整列表,请参阅版本号。您还可以选择下载并编译最新的源代码(称为 master)。如果您选择这么做,请在初始化代码库时直接忽略分支规范。

选择分支后,请按照下面的相应说明来设置编译环境。

设置 Linux 编译环境

以下说明适用于所有分支(包括 master)。

我们会定期在 Ubuntu LTS (14.04) 和 Debian 测试版本中对 Android 编译系统进行内部测试。其他大多数分发版本都应该具有所需的编译工具。

如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中编译。

安装所需的软件包 (Ubuntu 14.04)

您需要 64 位版本的 Ubuntu(建议使用 Ubuntu 14.04)。

    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 libgl1-mesa-dev libxml2-utils xsltproc unzip
    

安装所需的软件包 (Ubuntu 12.04)

您可以使用 Ubuntu 12.04 来编译较低版本的 Android。master 或最近推出的一些版本不支持 Ubuntu 12.04。

    sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
    sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
    

安装所需的软件包 (Ubuntu 10.04-11.10)

不再支持在 Ubuntu 10.04-11.10 中进行编译,但它们仍可用来编译较低版本的 AOSP。

    sudo apt-get install git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
    

在 Ubuntu 10.10 中,请运行以下命令:

    sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
    

在 Ubuntu 11.10 中,请运行以下命令:

    sudo apt-get install libx11-dev:i386
    

配置 USB 访问权限

按照说明设置用于开发的设备,以安装适用于所有 Android 设备且由社区维护的默认 udev 规则集。

使用单独的输出目录

默认情况下,每次编译的输出都会存储在相应源代码树的 out/ 子目录下。

在一些拥有多个存储设备的计算机上,如果将源代码文件和输出存储在单独的卷中,编译速度会更快。若要进一步提高编译速度,可以将输出存储在已针对速度(而非崩溃稳定性)进行优化的文件系统中,这是因为在文件系统损坏时可以重新生成所有文件。

要进行这项设置,请导出 OUT_DIR_COMMON_BASE 变量,使其指向将存储输出目录的位置。

    export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
    

对于每个单独的源代码树,其输出目录都将以其源代码树存放目录命名。例如,如果您有源代码树 /source/master1/source/master2,且OUT_DIR_COMMON_BASE 设置为 /output,则输出目录为 /output/master1/output/master2

请避免将多个源代码树存储在具有相同名称的目录下,否则源代码树会会终止共享输出目录,并且会出现不可预知的结果。仅 Jelly Bean (4.1) 及更高版本(包括 master 分支)支持这种做法。

设置 Mac OS 编译环境

在默认安装过程中,macOS 会在一个保留大小写但不区分大小写的文件系统中运行。Git 不支持这种类型的文件系统,而且此类文件系统会导致某些 Git 命令(如 git status)的行为出现异常。因此,我们建议您始终在区分大小写的文件系统中处理 AOSP 源代码文件。使用下文中介绍的磁盘映像可以非常轻松地做到这一点。

有了适当的文件系统,在新型 macOS 环境中编译 master 分支就会变得非常简单。要编译较早版本的分支,则需要一些额外的工具和 SDK。

创建区分大小写的磁盘映像

您可以使用磁盘映像在现有的 macOS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择 New Image。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的增长需求。使用稀疏映像有助于节省空间,同时可以根据需要进行扩展。请选择 Case sensitive, Journaled 卷格式。

您也可以通过 shell 使用以下命令创建文件系统:

    hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
    

这将创建一个 .dmg(也可能是 .dmg.sparseimage)文件,该文件在装载后可用作具有 Android 开发所需格式的驱动程序。

如果您以后需要更大的卷,可以使用以下命令来调整稀疏映像的大小:

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
    

对于存储在主目录下的名为 android.dmg 的磁盘映像,您可以向 ~/.bash_profile 中添加帮助程序函数:

  • 要在执行 mountAndroid 时装载映像,请运行以下命令:
    # mount the android file image
        mountAndroid() { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
  • 要在执行 umountAndroid 时卸载映像,请运行以下命令:
    # unmount the android file image
        umountAndroid() { hdiutil detach /Volumes/android; }

装载 android 卷后,您将在其中开展所有工作。您可以像对待外接式驱动盘一样将其弹出(卸载)。

安装 Xcode 和其他软件包

  1. 使用以下命令安装 Xcode 命令行工具:
    xcode-select --install
    对于旧版 macOS(10.8 或更低版本),您必须从 Apple 开发者网站安装 Xcode。如果您尚未注册成为 Apple 开发者,则必须创建一个 Apple ID 才能下载。
  2. 安装 MacPortsHomebrew 以进行软件包管理。
  3. 确保关联的目录位于 ~/.bash_profile 文件的路径中:
    1. MacPorts - /opt/local/bin 必须显示在 /usr/bin 之前
      export PATH=/opt/local/bin:$PATH
    2. Homebrew - /usr/local/bin
      export PATH=/usr/local/bin:$PATH
    3. 如果使用 MacPorts,请发出:
      POSIXLY_CORRECT=1 sudo port install git gnupg
    4. 如果使用 Homebrew,请发出:
      brew install git gnupg2

    设置文件描述符数量上限

    在 macOS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。要提高此上限,请将下列行添加到 ~/.bash_profile 中:

        # set the number of open files to be 1024
        ulimit -S -n 1024

    下一篇:下载源代码

    至此您的编译环境已准备就绪!请继续阅读下载源代码一文。