绕过https下载aosp代码

来源:互联网 发布:工作进度跟踪软件 编辑:程序博客网 时间:2024/05/16 13:43

下载Google Android(AOSP)开源代码总碰钉子。Google喜用https,这让我在公司里受制于proxy,公司怎能让加密后的数据随意进出公司内网呢;在家里受制于伟大的墙,Oh,伟大的墙。翻墙吧,速度又太慢。AOSP代码量已达到近30G。


反复碰壁后,痛定思痛,潜心研究了一下Google的下载工具-repo。大体框架理清了。repo只是一个wrapper,它先在当前目录下建子目录.repo/repo,然后下载一系列工具到.repo/repo里,最后调用.repo/repo/main.py。而main.py又会调.repo/repo/subcmds下的脚本。比如你输入的命令是“repo init”,.repo/repo/subcmds/init.py里的代码就会被使用。


架构清楚了,怎么才能快速下载呢?大的思路是用不加密的http代替加密的https。先看一下google网页-http://source.android.com/source/downloading.html上的下载步骤:

$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

这是在下载repo,不会出问题。下面,

$ mkdir WORKING_DIRECTORY

$ cd WORKING_DIRECTORY

这也不会有问题。

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

问题来了,首先需要将https换成http,还不够,还会出现clone.bundle无法下载的错误。原因是repo只是一个wrapper,它的代码会用https协议下载真正干活的工具。这时会出错。需要替它完成这步工作。有3个方法。方法一,如果你以前成功执行过repo init,把.repo/repo拷贝过来,也放在WORKING_DIRECTORY/下的.repo/repo。方法二,用"mkdir .repo; git clone http://gerrit.googlesource.com/git-repo repo" 然后用“git checkout”切换到stable分支。这个方法我没试,可能会有些问题。方法三,将repo中_Clone()和_Checkout()中相应的命令抽出来,逐个执行:

$ mkdir -p .repo/repo; cd .repo/repo

$ git init --quiet

$ git config remote.origin.url http://gerrit.googlesource.com/git-repo

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

$ git fetch origin '+refs/heads/*:refs/remotes/origin/*' 'refs/tags/*:refs/tags/*'

$ git update-ref refs/heads/default 'refs/remotes/origin/stable^0'

$ git config 'branch.default.remote' 'origin'

$ git config 'branch.default.merge' 'refs/heads/stable'

$ git symbolic-ref HEAD 'refs/heads/default'

$ git read-tree --reset -u HEAD

下面你就可以执行:

$ cd ../..

$ repo init -u http://android.googlesource.com/platform/manifest

应该成功了。检查一下这个文件:.repo/manifests/default.xml,看看有没有https,有的话将其替换为http。现在可以执行:

$ repo sync

如果你经历过之前的慢速、时断时续、停滞不动,和下载失败。现在,看着飞速下载,你一定自心底冒出一个字,这个字就念“shuang”。


0 0