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
相关推荐
火柴就是我9 小时前
Flutter 项目本地 Maven 引入 AAR 找不到?一次 Gradle 路径问题排查
android
火柴就是我9 小时前
Android 打包报错 25.0.3
android·前端
码上有光9 小时前
Linux进程通信——共享内存、消息队列和信号量
android·linux·运维·共享内存·通信
Android打工仔14 小时前
Kotlin 协程源码解析:DispatchedContinuation 里的 Dispatcher 从哪里来?
android·kotlin
打工仔折腾 AI14 小时前
从BPE到SentencePiece:Transformer分词原理与Python实战对比
android·人工智能·python·深度学习·langchain·transformer·ai agent 实战
Dovis(誓平步青云)14 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
恋猫de小郭18 小时前
KMP 又改了编译流程, Separate Compilation 禁止了 `commonMain` 的依赖穿透
android·前端·flutter
执明wa19 小时前
Android RecyclerView 实战:点击频道栏切换对应内容
android·开发语言·windows·microsoft·android studio
新鲜势力呀19 小时前
PHP 定时数据同步实战:从第三方接口超时到异步同步 + 增量更新架构优化全过程
android
星间都市山脉21 小时前
RecoveryUI 圆角屏安全边距配置及代码调用链
android·java·linux·windows·ubuntu