AOSP代码库同步时间过长

23

我正在尝试学习同名书籍中的嵌入式Android。作者建议使用AOSP姜饼分支进行工作。因此,我跟随着下载了源代码:

$ repo init -u https://android.googlesource.com/platform/manifest.git
-b gingerbread

$ repo sync

但是这个过程太耗时了。从输出结果来看,似乎还在下载其他分支的源代码(我看到了android-5……),这不是我想要的。我在想这是否是导致运行时间如此之长的原因。

有人遇到过同样的问题吗?请给我一些建议!谢谢!


在撰写本文时,您需要约400GB的磁盘空间来检出代码并进行一次构建。对于额外的构建,需要更多的磁盘空间。我预计这将每年增长50-100GB。但这只是一个猜测。 - Forivin
4个回答

40

AOSP是一个几十GB的下载,因此你无法做太多事情。不过,将-c / --current-branch选项传递给repo sync会导致Repo告诉Git仅获取您实际需要的分支,而不是每个存储库的所有分支。对于像Gingerbread这样的旧版本,理论上应该非常有益。但是,Repo使用它通过HTTP下载的Git捆绑包来生成存储库种子,并且这些捆绑包文件不受-c选项的影响。使用--no-clone-bundle禁用了捆绑包文件。因此,以下Repo命令应该产生最小的下载:

repo sync -c --no-clone-bundle

请记住,姜饼版本已经发布了好几年。它在许多最新的硬件上不能直接使用。


1
但是,如果您指定了一个分支(例如Marshmallow),它不应该下载其他分支(nougat,gingerbread)吗?例如,如果您使用-b指定了marshmallow的清单? - Rahul Iyer
@KaizerSozay:是的,那就是我想说的。使用“-c”选项,你只会下载所需的分支。 - Magnus Bäck

17

你应该使用这些命令:

例如:对于我的个人AOSP Repo,

repo init --depth=1 -u https://github.com/zawzaww/aosp-android.git -b android-8.1.0

然后,

repo sync  -f --force-sync --no-clone-bundle --no-tags -j$(nproc --all)

您可以在我的GitHub Repo 上了解更多。


1
我使用android-11.0.0_r3进行了这个操作,但最终数据仍超过60GB(此时我的磁盘已满,所以我不知道它需要多少空间)。如果到2025年构建Android需要一个专用的2TB硬盘,我也不会感到惊讶。 - Forivin
1
“-f”已经过时。 - enigmaticPhysicist

8

7
repo sync -c --no-tags --no-clone-bundle -j2

大大缩短了我的同步时间。

1
通常情况下,如果答案包括命令的解释以及为什么这样做可以解决问题而不会引入其他问题,那么它们会更有帮助。您能详细说明一下 -j2 开关是什么作用以及如何帮助吗? - Tom Aranda
1
-jmake 命令中的一个开关,用于设置要使用的作业数(并行度)。-j2 将作业数设置为 2(即使用 2 个核心)。在 Linux 上,通常使用 -j\nproc`-j$(getconf _NPROCESSORS_ONLN)` 来自动检测核心数。 - pevik
使用 nproc 并不是这种情况。这里的 -j 设置了并行网络下载的线程数,它并不受 CPU 的限制。对于大多数情况来说,-j 4 已经足够了。 - ttimasdf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接