由于现在的工作与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 下的该法:

sudo gedit /etc/resolv.conf
在其中的 nameserver 中添加
nameserver 8.8.8.8nameserver 8.8.4.4nameserver 10.64.102.109
即可。

Mac 下的改法:

打开网络偏好设置:


点击“高级”-DNS,参照如下配置:


即可。

更多相关文章

  1. Android(安卓)Process 'command 'C:\Users\Win\AppData\Loca
  2. android中的按键处理
  3. Android中的soundpool小结
  4. android js脚本续
  5. Android中项目中各个文件夹的含义和用途详解
  6. Android的一段常用动画效果代码(如何让点击的图片控件加速飞入到
  7. Android(安卓)之 数据存储方式
  8. android GPS开启方法 代码
  9. android jni开发环境的搭建

随机推荐

  1. 关于android WebViewClient和WebChromeCl
  2. Android(安卓)去掉 ImageButton 的白色背
  3. Android实现九宫格
  4. Android(安卓)Socket开发 注意事项
  5. android:showAsAction="never"是做什么用的
  6. Android(安卓)wakeLock 分析
  7. xmlns:android="http://schemas.android.
  8. Android(安卓)移动端网络优化 (四)
  9. Android(安卓)中的消息传递,详解广播机制
  10. Android系统权限和root权限