源代码同步问题

尽管我们一直万分谨慎,但 Android 源代码有时还是会出现一些小问题。本页详细介绍了您在尝试同步 Android 源代码时可能会遇到的一些已知问题。

同步源代码时遇到的问题(代理问题)

症状repo initrepo sync 失败,并显示 HTTP 错误,通常为 403 或 500。

原因:有很多可能的原因,大多数情况下都与 HTTP 代理有关,这些代理无法顺利传输大量数据。

解决方法:虽然还没有通用的解决方法,但是使用 Python 2.7 以及明确使用 repo sync -j1 有时可能会有帮助。

同步源代码树时遇到的问题(DNS 问题)

症状:在运行 repo sync 时进程失败,并显示与无法识别主机名相关的各种错误。其中一种错误是 <urlopen error [Errno -2] Name or service not known>

原因:有些 DNS 系统难以应对同步源代码树时涉及的大量查询(在最糟糕的情况下,可能会有数百条查询请求)。

解决方法:手动解析相关主机名,并在本地对解析结果进行硬编码。

您可以使用 nslookup 命令解析主机名,该命令将为每个主机名指定一个数字 IP 地址(通常是在输出的“Address”部分)。

nslookup googlesource.com
nslookup android.googlesource.com

然后,您可以在本地对它们进行硬编码,方法是修改 /etc/hosts,在该文件中添加两行内容,格式如下:

aaa.bbb.ccc.ddd googlesource.com
eee.fff.ggg.hhh android.googlesource.com

同步源代码树时遇到的问题(TCP 问题)

症状:在同步时 repo sync 挂起,通常是在同步操作完成 99% 时出现这种情况。

原因:TCP/IP 堆栈中的某些设置在有些网络环境中会导致出现问题,使得 repo sync 既无法完成,也不会失败。

解决方法:在 Linux 中,请输入以下命令:

sysctl -w net.ipv4.tcp_window_scaling=0

在 macOS 中,在网络设置部分停用 rfc1323 扩展程序。