本部分介绍了如何设置本地工作环境来编译 Android 源文件。您需要使用 Linux 。目前不支持在 Windows 环境下进行编译。
Android系统版本是以Android7.1.1版本AOSP为基础源码开发的,通常是在 GNU/Linux 操作系统中进行编译。您也可以使用虚拟机在不支持的系统(例如 Windows)中编译 Android。但我们推荐使用 Ubuntu LTS (16.04、18.04) 乃至更高版本系统对 Android系统进行编译。欢迎向我们报告在其他分发版本中的测试结果(无论结果是成功还是失败)。
- 注意:要查看完整的硬件和软件要求列表,请参阅AOSP编译软硬件要求。然后,请按照下方适用于 Ubuntu 的详细说明进行操作。
在 Ubuntu 上,请使用 OpenJDK。要了解确切版本,请参阅 JDK 要求;要了解相关说明,请参阅以下各个部分。
请运行以下命令:
sudo apt-get update
sudo apt-get install openjdk-8-jdk
(可选)对于以上 Ubuntu 版本,您可以通过运行以下命令来更新默认的 Java 版本:
sudo update-alternatives --config java
sudo update-alternatives --config javac
在编译过程中,如果您遇到 Java 版本错误,请按照错误的 Java 版本部分中的说明设置其路径。
执行以下命令,安装编译所需的依赖库:
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
默认情况下,每次编译的输出都会存储在相应源代码树的 out/ 子目录下。
在一些拥有多个存储设备的计算机上,如果将源文件和输出存储在单独的存储卷中,编译速度会更快。若要进一步提高编译速度,可以将输出存储在已针对速度(而非崩溃稳定性)进行优化的文件系统中,这是因为在文件系统损坏时可以重新生成所有文件。 要进行这项设置,请导出 OUT_DIR_COMMON_BASE 变量,使其指向将存储输出目录的位置。
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
您可以视需要指示编译过程使用 ccache 编译工具,ccache 是适用于 C 和 C++ 的编译器缓存,有助于提高编译速度。这对于编译服务器和其他高容量生产环境来说尤其有用。ccache 可用作用于加快重新编译速度的编译器缓存。如果您经常使用 make clean,或者经常在不同的编译产品之间切换,则非常适合使用 ccache。
注意:如果您是在执行增量编译(例如个人开发者而非编译服务器),ccache 可能会让您为缓存未命中埋单,从而减慢您的编译速度。
要使用 ccache,请在源代码树的根目录下执行以下命令:
export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G
建议的缓存大小为 50G 到 100G。
请将以下内容添加到 .bashrc(或等同文件)中:
export USE_CCACHE=1
默认情况下,缓存将存储在 ~/.ccache 下。如果主目录位于 NFS 或一些其他的非本地文件系统中,您还需要在 .bashrc 文件中指定目录。
在 Linux 中,您可以运行以下命令来观看使用 ccache 时的情况:
watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s