针对 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 使用 72 核机器和 64 GB RAM 来构建 Android。采用此硬件配置时,一个完整的 Android build 大约需要 40 分钟;Android 增量 build 大约需要几分钟的时间。相比之下,使用 6 核机器和 64 GB RAM 构建一个完整 build 大约需要 6 个小时。

满足操作系统要求

开发工作站必须运行采用 GNU C 库 (glibc) 2.17 或更高版本的任何 64 位 Linux 发行版。

安装必需的软件包

如需构建 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。

安装必需的软件

您必须先安装 OpenJDK、Make、Python 3 和 Repo,然后才能使用 AOSP。Android 的 AOSP 主分支附带预构建版本的 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

后续操作