一、安装必备工具

  1. sudo apt-get install curl python git

二、使用清华镜像源配置repo

  1. mkdir ~/bin
  2. curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
  3. chmod a+x ~/bin/repo
  4. vi ~/.bashrc
  5. # 在home目录下的.bashrc中追加如2条下配置
  6. PATH=~/bin:$PATH
  7. export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
  8. #刷新配置,立即生效
  9. source ~/.bashrc

三、配置git信息

  1. git config --global user.email "you@example.com"
  2. git config --global user.name "Your Name"

四、初始化仓库

  1. mkdir aosp
  2. cd aosp
  3. repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r41 --depth=1

命令详解

  1. repo init:

    • 初始化一个新的 Repo 客户端。它用于设置当前工作目录的 Repo 仓库配置。
  2. -u 参数(--manifest-url:

    • 指定 manifest 仓库的 URL,这个仓库包含了所有项目的列表以及它们的分支和远程地址。
    • 在这里,https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest 是清华大学镜像站点提供的 AOSP(Android Open Source Project)清单仓库地址。
  3. -b 参数(--manifest-branch:

    • 指定要使用的 manifest 分支。
    • android-9.0.0_r9 是 Android 9(Pie)中一个具体的版本分支。该分支的清单定义了所有相关仓库的版本和内容。
  4. --depth=1:

    • 启用 浅克隆,只克隆指定分支的最新一次提交,而不是整个提交历史。
    • 这可以显著减少下载数据的大小和时间,但代价是丢失了完整的提交历史。
    • 适合仅需要源码而不需要完整的开发历史记录的场景。
  5. --platform=auto:

    • 自动检测当前操作系统的架构(如 x86_64 或 arm64)并配置相应的 Repo 环境。
    • 它会根据你的操作系统选择最佳配置,确保 Repo 工具的正常运行。

五、同步源码

  1. repo sync -c -j8 2>&1 | tee sync.log

命令拆解与解释

  1. repo sync:

    • 该命令用于同步代码库,根据 repo init 创建的工作环境(包括 .repo 目录中的 manifest 配置)下载或更新 AOSP 源码。
    • repo sync 会从远程仓库下载源码到本地。
  2. -c:

    • -crepo sync 的一个选项,表示只同步当前清单中指定的分支。
    • 如果未加此选项,repo sync 会同步所有分支的代码历史记录,而加上 -c 则只会同步当前 manifest 文件中明确指定的分支,减少不必要的数据下载量。
    • 适用于下载特定版本代码或减少磁盘空间和时间占用的场景。
  3. -j8:

    • -j8 指定并行线程数为 8,允许同时运行 8 个线程进行下载。
    • 增加并行线程可以提高下载速度,但可能会占用更多的网络带宽和系统资源。
    • 线程数可以根据 CPU 核心数和网络条件调整,比如:
      • 单核机器可以使用 -j1
      • 高性能多核机器可以使用 -j16 或更高。
  4. 2>&1:

    • 将标准错误输出(stderr)重定向到标准输出(stdout)。
    • 这样,repo sync 命令的所有输出(包括错误信息)都会被合并到一起,便于记录和查看。
  5. | tee sync.log:

    • tee 命令用于同时将标准输出的内容写入到文件(sync.log)并在终端中显示。
    • 具体作用:
      • 在终端中实时查看同步进度。
      • 同时将同步日志保存到文件 sync.log 中,以便后续分析和排查问题。