【AOSP】解决repo拉取提示无法连接android.googlesource.com

问题描述

众所周知安卓是谷歌生的,但国内不能直接连谷歌,所以拉取AOSP的时候只能要么开魔法要么从镜像站拉。由于绝大多数魔法都是流量计费制,而AOSP仓库非常大,开魔法很贵,所以通常推荐使用镜像站拉取。本文针对的是镜像站拉取的情况。

报错内容

从镜像站拉取源码,repo sync有时会提示 \ncurl: (28) Failed to connect to android.googlesource.com port 443 after 136483 ms: Couldn't connect to server\n

这是因为在repo sync的过程中拉取了一些子仓库,而这些子仓库的manifest里指向的仓库地址还是谷歌的源,所以需要手动改成镜像站的地址。

解决办法

首先从镜像站init

ruby 复制代码
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

然后执行repo sync,注意清华镜像站不要开太多线程,不然可能被镜像站ban,推荐-j4就可以了

bash 复制代码
repo sync -j4

直到报错提示Failed to connect to android.googlesource.com的时候,按Ctrl + C取消sync操作,可能需要多按几次才停得下来。

然后在项目在根目录,和.repo目录同级的位置,创建一个文件

bash 复制代码
touch fix.sh

把这段内容粘贴进去

bash 复制代码
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

保存,然后给权限,运行

bash 复制代码
chmod 777 fix.sh
./fix.sh

如果没有报错就是成功了。然后重新repo sync,刚才报错的仓库就可以正常同步下来了,但之后可能还会报错,这是因为子仓库会随着sync的过程不断被down下来,新down下来的仓库指向的还是谷歌的url,这时候就再取消sync,重新执行sh脚本即可。

注意执行sh脚本的时候要在.repo目录所在的目录下执行。例如:

我的项目在~/AOSP
.repo目录在~/AOSP/.repo

那么就要执行

bash 复制代码
cd ~/AOSP
./fix.sh

不要直接执行

javascript 复制代码
~/AOSP/fix.sh

因为脚本里面写的是相对路径,直接这样执行会找不到.repo目录。

常见问题

如果脚本执行的时候报错了说找不到文件或找不到目录,说明你的.repo目录里面的内容有问题,一般是由于repo sync在一开始就报错了,或者压根没有执行过repo sync,亦或者你有多个.repo目录,互相冲突了。init的时候注意看控制台信息提示你当前使用的是哪个.repo目录,最好不要同时存在多个.repo目录,会发生各种奇奇怪怪的事,如果已经有了多个.repo目录最好统统删掉重新init

相关推荐
00后程序员张4 小时前
python 抓包在实际项目中的合理位置,结合代理抓包、设备侧抓包与数据流分析
android·ios·小程序·https·uni-app·iphone·webview
灵感菇_4 小时前
Android Service全面解析
android·service·四大组件
alexhilton5 小时前
Jetpack ViewModel内幕:内部机制与跨平台设计
android·kotlin·android jetpack
_李小白7 小时前
【Android FrameWork】延伸阅读: Android应用安装过程
android
光头闪亮亮8 小时前
Android手持机扫码出入库的开发详解-6.APP下载更新
android
光头闪亮亮8 小时前
Android手持机扫码出入库的开发详解-7.SQLite CRUD操作
android
键来大师8 小时前
Android16 设置壁纸出现APK重启问题和悬浮控件等图标变成黑色图框
android·framework·rk3576
_李小白8 小时前
【Android FrameWork】第四十二天:PMS main函数
android
BoomHe9 小时前
Android LMK(Low Memory Killer)机制
android
时光呀时光慢慢走10 小时前
MAUI 开发安卓 MQTT 客户端:实现远程控制 (完整源码 + 避坑指南)
android·物联网·mqtt·c#