即使我們盡心盡力,有時也會出現小問題。本頁詳細介紹了您在嘗試同步 Android 源代碼時可能遇到的一些已知問題。
同步源代碼的困難(代理問題)
症狀: repo init
或repo 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 地址(通常在輸出的“地址”部分)。
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 擴展。