由于现在的工作与Android紧密相关,因此同步一套Android的源码对工作的帮助还是蛮大的,话不多说,开始更新代码。
Android源码的下载地址:http://source.android.com/source/downloading.html,下面有比较详细的说明,不过英文就有点小蛋疼了,很愤恨的是为毛这个世界的通用语言是英语。。。废话不多说,前面的repo的安装什么的,都很easy,这里直接略过,也鲜有人遇到那样的问题吧:) OK ,页面继续下拉:
Run repo init
to bring down the latest version of Repo with all its most recent bug fixes. You must specify a URL for the manifest, which specifies where the various repositories included in the Android source will be placed within your working directory.
$ repo init -u https://android.googlesource.com/platform/manifest这一步就到了init了,这里我就直接插入正确的步骤吧,在中国拉国外的代码确实比较但疼,这里也不要管为什么了,打开https://android.googlesource.com/new-password,生成谷歌账户密码,在用户根目录下若无则新建.netrc文件,直接将下方说明要拷贝的两行拷贝到文件中去,并且将上面的init代码改成:
$ repo init -u https://android.googlesource.com/a/platform/manifest这里一般也不会有问题,要么就是repo的问题,这一类问题很好解,反正我用的是Ubuntu14.04直接下载的没有出现任何问题,接着往下;
对了,上面的init也可以直接在拉的代码后跟-b branch branch,直接拉分支,这里也不赘述,我是直接拉的manifest,反正后面可以checkout分支,这个随个人喜欢的吧~~:)
接下来就是很简单的一个代码:repo sync,但同时它也是最蛋疼的一个代码,因为这一步才是真正的从服务器把源码下拉的过程,repo相当与是执行了多个git,期间有一个git出问题,比如网络卡神马的就中断,然后就是重复repo sync。。。。
当然那是普通的操作,据我了解,一般来说,从Android官方的网站上下载代码,最多就两个错误,一个就是上面有个Goolge Account的账户密码没有写到~/.netrc中,这里没加,最容易出现fetch errors,原因嘛,官网也写了,需要认证,不然不让游客类型的人随便拉代码,但是,这一步加了效果也不大,因为后面照样会出同样的问题,而这次出问题,那就实实在在是因为。。。。。。。网络太卡了~!
什么,你不信,你10M ,20M, 甚至100M这种大型渠道都会卡??是的,要怪就怪Android官网服务器建立在国外吧。是不是repo sync的时候在接受对象的时候眼睁睁的看着后面的速率12KiB/s、5KiB/s,最后彻底卡出,然后退出,然后。。,。重新repo sync。。。
当然你有耐心的可以在代码目录下建立一个sh文件:
#!/bin/bash
echo ¨================start repo sync===============¨
repo sync -f -j10
while [ $? == 1 ]; do
echo ¨================sync failed, re-sync again=============¨
sleep 3
repo sync -f -j10
done
这个文件其实作用也蛮大的,推荐大家使用,功能很简单,就是repo sync在异常退出后,自动重新执行repo sync。省得自己盯着,然后重新手动输入。
OK,回到正题,解决网络卡的问题吧,既然服务器在国外,而通过类似电信,联通、移动这些运营商,肯定不可新的,中国这个河蟹的社会,你懂得。因此,机智的小伙伴想到了一招,没错,,,FanQiang!什么你不懂?哦,sorry,恕我不能直言了。
FanQiang的方式很多种,这里建议Http代理。Http代理也有很多种, - -! 是的,这里推荐,Google proxy,这里我也不多讲了,搜关键字,chrome+proxy或Firefox+proxy。OK ,当你有了这个工具之后一切都迎刃而解了,也不需要搞全局代理,在repo sync之前,输入
export http_proxy="http://你的代理IP:代理端口/"
export https_proxy="http://你的代理IP:代理端口/"
以上是我用的,http和https代理,其他还有什么socket神码的,应该都比较好用吧,我就不折腾了,这里大家也可以自己去发现发现。
输入完上面俩代码之后,假如你的代理没有问题的话,接下来就放心大胆的输入repo sync吧!你甚至不需要用上面的sh文件自动重新执行repo sync,因为在我的使用中,它真的,是一次性就sync完成。。。令人兴奋哪,速度也是钢钢的啊。我是10M的电信光纤,不过代理嘛,而且实际代码的下载速度也没这么快,那么多的文件呢,大约耗时5个小时左右拉完,代码最终大小定格在17G.....我记得公司的代码没这么大啊,这个后话啦,以后再看,这里就是把拉代码的过程跟大家分享一下,有帮助的顶一下喔。
--------------------------------2014.11.10更新--------------------------------
最近更新Android 5的源代码的时候发现,goagent也不怎么给力了。。不知道是不是mac系统的原因,经常是挂掉。这里就再说一下另一个方法:
首先在终端中ping相关的网址如android.googlesource.com。ping一下的原因是,网上也有人整理出Google相关的IP,但是它其实不定义会变动。确保起见,自己ping通了,然后将IP地址添加到hosts文件中,然后再同步源码。可能速度没那么快,但是快的时候一天也差不多能搞定,我人品不行,同步了整整两天。。。。。
同步的时候上面那个sh文件也是适用的,因为使用这个方法的话,会比较经常出现error。。
--------------------------------2014.11.16更新--------------------------------
今天发现即使改了 HOSTS 文件,但是 repo sync 的时候还是会经常性失败,很纠结,四处查询资料发现一个解决办法,在 DNS 中添加 Google 的 DNS 服务器:
8.8.8.8或者8.8.4.4或者10.64.102.109就可以了:
Ubuntu 下的该法:
在其中的 nameserver 中添加 即可。Mac 下的改法:
打开网络偏好设置:
点击“高级”-DNS,参照如下配置:
即可。
来源:https://i-blog.csdnimg.cn/blog_migrate/5055def4213af9ed2761279740409d4d.png