問(wèn)題描述
眾所周知安卓是谷歌生的,但國(guó)內(nèi)不能直接連谷歌,所以拉取AOSP的時(shí)候只能要么開(kāi)魔法要么從鏡像站拉。由于絕大多數(shù)魔法都是流量計(jì)費(fèi)制,而AOSP倉(cāng)庫(kù)非常大,開(kāi)魔法很貴,所以通常推薦使用鏡像站拉取。本文針對(duì)的是鏡像站拉取的情況。
報(bào)錯(cuò)內(nèi)容
從鏡像站拉取源碼,repo sync有時(shí)會(huì)提示 \ncurl: (28) Failed to connect to android.googlesource.com port 443 after 136483 ms: Couldn't connect to server\n
這是因?yàn)樵趓epo sync的過(guò)程中拉取了一些子倉(cāng)庫(kù),而這些子倉(cāng)庫(kù)的manifest里指向的倉(cāng)庫(kù)地址還是谷歌的源,所以需要手動(dòng)改成鏡像站的地址。
解決辦法
首先從鏡像站init
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/help/git-repo
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-11.0.0_r27
然后執(zhí)行repo sync,注意清華鏡像站不要開(kāi)太多線(xiàn)程,不然可能被鏡像站ban,推薦-j4就可以了
repo sync -j4
直到報(bào)錯(cuò)提示Failed to connect to android.googlesource.com的時(shí)候,按Ctrl + C取消sync操作,可能需要多按幾次才停得下來(lái)。
然后在項(xiàng)目在根目錄,和.repo目錄同級(jí)的位置,創(chuàng)建一個(gè)文件
touch fix.sh
把這段內(nèi)容粘貼進(jìn)去
find .repo/projects -name config | while read config; do
sed -i 's#https://android.googlesource.com/#https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/#g' "$config"
done
保存,然后給權(quán)限,運(yùn)行
chmod 777 fix.sh
./fix.sh
如果沒(méi)有報(bào)錯(cuò)就是成功了。然后重新repo sync,剛才報(bào)錯(cuò)的倉(cāng)庫(kù)就可以正常同步下來(lái)了,但之后可能還會(huì)報(bào)錯(cuò),這是因?yàn)樽觽}(cāng)庫(kù)會(huì)隨著sync的過(guò)程不斷被down下來(lái),新down下來(lái)的倉(cāng)庫(kù)指向的還是谷歌的url,這時(shí)候就再取消sync,重新執(zhí)行sh腳本即可。
注意執(zhí)行sh腳本的時(shí)候要在.repo目錄所在的目錄下執(zhí)行。例如:
我的項(xiàng)目在~/AOSP
.repo目錄在~/AOSP/.repo
那么就要執(zhí)行
cd ~/AOSP
./fix.sh
不要直接執(zhí)行
~/AOSP/fix.sh
因?yàn)槟_本里面寫(xiě)的是相對(duì)路徑,直接這樣執(zhí)行會(huì)找不到.repo目錄。
常見(jiàn)問(wèn)題
如果腳本執(zhí)行的時(shí)候報(bào)錯(cuò)了說(shuō)找不到文件或找不到目錄,說(shuō)明你的.repo目錄里面的內(nèi)容有問(wèn)題,一般是由于repo sync在一開(kāi)始就報(bào)錯(cuò)了,或者壓根沒(méi)有執(zhí)行過(guò)repo sync,亦或者你有多個(gè).repo目錄,互相沖突了。init的時(shí)候注意看控制臺(tái)信息提示你當(dāng)前使用的是哪個(gè).repo目錄,最好不要同時(shí)存在多個(gè).repo目錄,會(huì)發(fā)生各種奇奇怪怪的事,如果已經(jīng)有了多個(gè).repo目錄最好統(tǒng)統(tǒng)刪掉重新init。