首页 > 技术文章 > 获取android-5.0.2_r1代码6.7G

sunblackshine 2015-09-11 14:04 原文

获取 android-5.0.2_r1 源代码的坎坷路:

服务器相关

======

* 国外服务器直接拉取,我一共有多个国外服务器,在获取android代码时下载速度都能到10MB/s的下载速度甚至更高。

  * dreamhost 服务器在进程消耗过多且超过一定时间会被杀死

  * bandwagonhost 服务器因为使用ssd,我最低的套餐只有10G,不足以存储代码

* 代理上网,我用bandwagonhost 搭建了 openvpn, pptpd 来作为跳板下载代码

  * openvpn 在链接上总是断断续续,是安全但是质量不能保证(可能我iptables设置有问题)

  * pptpd 的速度会比openvpn好不少,安全性在此忽略不计

* android代码源,我先后用过 git://aosp.tuna.tsinghua.edu.cn/android/

 

* android代码大小,如果拉取全部代码实在太大,repo和git的问题还比较多、

  * repo 调用 git fetch 时如果中断,只在pack目录下产生一个 tmp_pack_* 的文件,第二次会重新下载,因此如果经常断线,目录会不断膨胀。完成后删除 tmp_pack_*即可。

  * repo init -u URL -b BRANCH 直接拉取代码展开后大概 55G

448K    abi
66M     art.git
25M     bionic.git
9.9M    bootable
38M     build.git
497M    cts.git
36M     dalvik.git
202M    developers
260M    development.git
20G     device
36M     docs
3.2G    external
1.9G    frameworks
115M    hardware
44M     libcore.git
736K    libnativehelper.git
29M     ndk.git
1.5G    packages
2.4M    pdk.git
9.7G    prebuilts
34M     sdk.git
35M     system
1.4G    tools

  可以看到其中 device 以及 prebuilts 目录最大,问题在于其中的二进制历史比较多,特别令人发指的是 device/lge 这个公司的文件历史达到 13G

  * 如何减少 android 源码大小,其实使用源码过程中很少会查看过多的历史记录以及切换分支,因此采用如下方法:

    * 减少历史记录 repo init -u URL -b BRANCH --depth=1, 这几保证了 git 历史不会很多,bin文件的历史也随之大幅度减小。

--depth=DEPTH       create a shallow clone with given depth; see git clone

    * 减少分支fetch repo sync -c, 这样只拉取当前指定分支,其他分支不会拉取。

 -c, --current-branch  fetch only current branch from server

  * 采用如上缩减源码的方法后源码展开后 23G,.repo 目录大小6.7G,这个量级相信每个玩android代码的人才感到舒心。

 

附带repo/git 转mirror的python脚本

 git2repo.zip

 使用方法:

  * work2mirror.py 将repo 转换为mirror,将脚本放在根目录下,该目录下应该同样存在 .repo ,运行脚本即可

    * 转换的结果是展开的git文件会被移动到 old_work_tree,而各个 git 下的 .git 目录会分布在该目录下,例如android就是 platform device 两个目录。

  * git2repo.py , 处理完 work2mirror 后就需要处理 manifests.git,可以将其复制出来运行 git2repo.py manifests.git ,此时 manifests.git 就可以放在git服务器作为仓库使用。

 

两个脚本主要解决了批量转换,并且处理了本地 logs/refs/remotes 里面的 branch 同步到 refs/heads

 

* 备注

如果用 --depth=1 抓下的代码叫做 shallow git, 这种代码不能作为 mirror 使用,因此想做mirror就不要加这个参数。

但是不加这个参数只用 sync -c 代码总体大小减少不多,但是 device prebuilts 下的文件占据了大部分空间,在做mirror的时候可以酌情删减。

推荐阅读