AOSP 下载

AOSP 是一个由 1000 余个 Git 项目构成的超级工程,需要使用 Google 专门为此开发的 repo 来拉取代码。整个代码下载流程分为三步:

  1. 先从 https://gerrit.googlesource.com/git-repo 拉取 repo 到 .repo/repo
  2. 再从 https://android.googlesource.com/platform/manifest 拉取 manifest 到 .repo/manifests.git,并检出到 .repo/manifests
  3. 最后根据 manifest,从 https://android.googlesource.com 拉取其它所有仓库到 .repo/project-objects//xxx.git 下,并在 ./ 下检出。

AOSP 版本

日期 版本 仓库数量 大小
2025/06/10 android16-release
2025/11/11 android16-qpr1-release
2025/12/02 android16-qpr2-release 1011

Git 初始化配置

repo 是 Git 操作的上层封装,所以克隆仓库时需要先定义 git 用户名和密码:

shell 复制代码
$ git config --global user.name "yewq"
$ git config --global user.email "yewq@yewq.cn"

下载 repo Launcher

使用发行版打包的 Repo launcher,这只是 Repo Launcher,完整的 repo 工具是通过 repo init 指令下载到工作目录中的。所有其他 repo 命令都必须有 .repo/ 下的完整 repo 工具:

shell 复制代码
$ sudo apt-get install repo

或者直接使用 Google 提供的下载:

shell 复制代码
$ mkdir ~/bin
$ export PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

初始化 repo 和 manifest

创建工作目录:

shell 复制代码
$ mkdir aosp
$ cd aosp/

初始化 Repo 配置:

shell 复制代码
### --repo-url:repo 仓库的 URL
### --repo-rev:repo 仓库的分支
### -u | --manifest-url:manifest 仓库的 URL
### -b | --manifest-branch:manifest 仓库的分支名,默认为 default 分支
### -m | --manifest-name:manifest 仓库中的清单文件名,默认为 default.xml
### --reference:参考本地已有的仓库,如果有则直接使用本地数据,不下载
### --dissociate:从 reference 复制数据到自己的仓库,即使 reference 删除也不影响
### --depth:浅克隆深度,只克隆最新的几组 commits
### --partial-clone:下载所有 commits + 所有 trees + 需要检出的 blobs
### --use-superproject:使用 superproject 功能
### --no-clone-bundle:在使用部分克隆时,不使用 git 的 bundle 下载功能,否则会降速
### --no-git-lfs:官方 AOSP 没有使用 LFS
$ repo init \
--repo-url=https://mirrors.ustc.edu.cn/aosp/tools/repo.git \
--repo-rev=stable \
--manifest-url=https://mirrors.ustc.edu.cn/aosp/platform/manifest.git \
--manifest-branch=android-latest-release \
--manifest-name=default.xml \
--partial-clone \
--use-superproject \
--no-clone-bundle \
--no-git-lfs \
--verbose

superproject:传统的 manifest 同步,如果 manifest 中记录的是分支名或者 tag 名,则需要向服务器请求分支/标签对应的 commit id;而如果使用 superproject 功能,服务器会有一个 superproject.git 仓库,可以更快地同步并签出相应的 commit id,显著加快同步速度。但 superproject.git 相较于 manifest 会有滞后,可能导致签出的代码与上游不一致。在开发环境下,推荐禁用该功能。

bundle:git server 会将多个 blob 打包成一个 bundle,加快下载速度。这个功能需要服务端的支持。目前镜像站不支持该模式。

同步

shell 复制代码
### -j | --jobs:并行同步线程数
### --jobs-network:网络进程数;只有在 no-interleaved 时才生效
### --jobs-checkout:检出进程数;只有在 no-interleaved 时才生效
### --fail-fast:当发生错误时,立刻退出
### --force-sync:如果 git 数据库损坏,强制同步远程
### --force-checkout:如果工作区有冲突的检出,强制覆盖
### --force-remove-dirty:如果远程删除了这个仓库,你在这个仓库做了修改,强制删除
### --interleaved:fetch 和 checkout 同步进行
### -c | --current-branch:只同步当前分支的 commit
### --no-tags:不拉取 tag
### --optimized-fetch:只有检出的项目与 manifests 中的不一致,才会 fetch;可以显著加快增量同步速度
### --prune:删除远程已经删除的分支
### --auto-gc:在同步后,运行垃圾回收;可以防止仓库膨胀
$ repo sync \
--jobs=4 \
--fail-fast \
--force-sync \
--force-checkout \
--force-remove-dirty \
--interleaved \
--current-branch \
--no-tags \
--optimized-fetch \
--prune \
--auto-gc \
--verbose

不推荐在镜像使用 --no-interleaved 来分开下载和检出,因为容易被镜像站禁止。

参考资料

  1. 【文档】Download the Android source
相关推荐
cch89182 小时前
Laravel vs ThinkPHP:PHP框架终极对决
android·php·laravel
米码收割机2 小时前
【Android】基于安卓app的汽车租赁管理系统(源码+部署方式+论文)[独一无二]
android·汽车
流星雨在线3 小时前
安卓使用 Startup 管理三方 SDK 初始化
android·startup
jwn9993 小时前
Laravel3.x:PHP框架的经典里程碑
android
lishutong10063 小时前
基于 Perfetto 与 AI 的 Android 性能自动化诊断方案
android·人工智能·自动化
REDcker3 小时前
Android Bionic Libc 原理与实现综述
android·c++·c·ndk·native·bionic
葱段3 小时前
Flutter 设置Android System Navigation/Status Bar背景色
android·flutter
半条-咸鱼3 小时前
如何通过 ADB 连接安卓设备(USB + 无线 TCP/IP)
android·adb
vonlycn3 小时前
Android Studio 5.3.3 新项目编译报错解决
android·ide·android studio