设置 AOSP 开发环境(9.0 或更高版本)

在您下载和构建 Android 源代码的 main 分支之前,请确保您的硬件满足必要的要求,并且已正确安装所需的软件。您还应该熟悉以下术语

Git
Git 是一个免费且开源的分布式版本控制系统。Android 使用 Git 进行本地操作,例如分支、提交、差异和编辑。如需了解 Git 方面的帮助,请参阅 Git 文档
Repo
Repo 是 Git 的 Python 封装容器,可简化跨多个 Git 代码库执行复杂操作的过程。Repo 并未取代 Git 的所有版本控制操作,而只是让复杂的 Git 操作更易于完成。Repo 使用清单文件将 Git 项目聚合到 Android 超级项目中。
清单文件
清单文件是一个 XML 文件,用于指定 Android 源代码中的各种 Git 项目在 AOSP 源代码树中的位置。

满足硬件要求

您的开发工作站应满足或超过以下硬件要求

  • 64 位 x86 系统。

  • 至少 400 GB 的可用磁盘空间用于检出和构建代码(250 GB 用于检出 + 150 GB 用于构建)。

  • 至少 64 GB 的 RAM。Google 使用配备 64 GB RAM 的 72 核计算机来构建 Android。使用此硬件配置,完整构建 Android 大约需要 40 分钟,而增量构建 Android 仅需几分钟。相比之下,使用配备 64 GB RAM 的 6 核计算机完整构建需要大约 6 个小时。

满足操作系统要求

您的开发工作站必须运行任何 64 位 Linux 发行版,且该发行版带有 GNU C Library (glibc) 2.17 或更高版本。

安装必需的软件包

要构建 Android 11 或更高版本,您必须使用 Ubuntu 18.04 或更高版本。要为 Ubuntu 18.04 或更高版本安装必需的软件包,请运行以下命令

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

在此命令安装的软件包中,包括用于下载 AOSP 源代码的 Git。

安装必需的软件

在使用 AOSP 之前,您必须安装 OpenJDK、Make、Python 3 和 Repo。Android 的 AOSP main 分支附带了 OpenJDK、Make 和 Python 3 的预构建版本,因此无需额外的安装步骤。以下部分介绍了如何安装 Repo。

安装 Repo

按照以下步骤安装 Repo

  1. 下载当前的软件包信息

    sudo apt-get update
  2. 运行以下命令以安装 Repo 启动器

    sudo apt-get install repo

    Repo 启动器提供了一个 Python 脚本,用于初始化检出并下载完整的 Repo 工具。

    如果成功,请跳到第 4 步。

  3. (可选)使用以下一系列命令手动安装 Repo

    export REPO=$(mktemp /tmp/repo.XXXXXXXXX)
    curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
    gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
    curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo

    前三个命令用于设置临时文件、将 Repo 下载到该文件,并验证提供的密钥是否与所需的密钥匹配。如果这些命令成功执行,则最后一个命令会安装 Repo 启动器。

  4. 验证 Repo 启动器版本

    repo version

    输出应指示版本为 2.4 或更高版本,例如

    repo launcher version 2.45

设置备用输出目录

默认情况下,每次构建的输出都存储在匹配源代码树的 out/ 子目录中。您可以通过导出 OUT_DIR 环境变量来替换此目录。例如,如果您想将输出存储在不同的驱动器上,可以将 OUT_DIR 指向该驱动器

export OUT_DIR=my_other_drive

下一步操作?