获取 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的时候可以酌情删减。

获取android-5.0.2_r1代码6.7G的更多相关文章

  1. Android 4.0 ProGuard 代码混淆 以及 proguard returned with error code 1.See console异常的解决方法

    最近呢说要上线,就去找了下上线的方法...之前做过代码混淆,用的是progarud.cfg,但是呢自己反编译了之后还是无效,然后就丢着先不管了,因为实在不知道什么情况.今天来上线的时候结果总是报错,总 ...

  2. Android 7.0系统代码调用安装apk时报错FileUriExposedException完美解决

    项目更新遇到问题   Android项目开发中经常遇到下载更新的需求,以前调用系统安装器执行安装操作代码如下: Intent intent = new Intent(); intent.setActi ...

  3. Android 4.0以后正确的获取外部sd卡存储目录

    刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...

  4. 【译】如何在 Android 5.0 上获取 SD卡 的读写权限

    因为最近项目需要,涉及到 SD卡 的读写操作,然而申请 <!-- 读写权限 --> <uses-permission android:name="android.permi ...

  5. android 6.0之后动态获取权限

    Android 6.0 动态权限申请   1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...

  6. Android 5.0以上获取系统运行进程信息

    在Android 5.0以上系统,调用getRunningAppProcesses 方法返回的列表为空,这是因为谷歌考虑到安全原因,已经把这个方法移除掉了, 那以后要获取系统运行的后台进程这个方法用不 ...

  7. 解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题【转】

    本文转载自:http://www.jb51.net/article/128398.htm 这篇文章主要介绍了Android 6.0获取wifi Mac地址为02:00:00:00:00:00的解决方法 ...

  8. Android 6.0 最简单的权限获取方法 RxPermition EasyPermition

    Android 6.0 要单独的获取权限 这里提供两种很简单的方法 EasyPermition RxPermition EasyPermition https://github.com/googles ...

  9. android:Android 6.0权限控制代码封装

    新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...

随机推荐

  1. nginx location 指令意义

    基本语法:location [=|~|~*|^~] /uri/ { … } = 严格匹配.如果这个查询匹配,那么将停止搜索并立即处理此请求.~ 为区分大小写匹配(可用正则表达式)!~为区分大小写不匹配 ...

  2. 一个设置为display:none;的div,在用.height()方法获取不到它的高,获取到的高度为0.

    <div style="width:100px;height:100px;background:red;visibility:hidden"></div>/ ...

  3. python基础(7)--深浅拷贝、函数

    1.深浅拷贝 在Python中将一个变量的值传递给另外一个变量通常有三种:赋值.浅拷贝.深拷贝 Python数据类型可氛围基本数据类型包括整型.字符串.布尔及None等,还有一种由基本数据类型作为最基 ...

  4. 9. Swarm mode

  5. C语言小程序之整除

    看到有人要求用C语言写这样一个小程序,就拿来温习一下 需求:输出从1到2015这2015个自然数中,能被4或5整除,但不能被30整除的数,并计算有多少个数.   #include<stdio.h ...

  6. day4 装饰器深入解析

    Python装饰器 装饰器是在不修改源码给代码添加功能的常用方法.@是装饰的标志.我们知道,在给代码增加功能的时候,要遵循开放封闭的原则,不能随便更改原码,因此装饰器的功能就显示出来了,只需要在函数前 ...

  7. python collections模块详解

    参考老顽童博客,他写的很详细,例子也很容易操作和理解. 1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选 ...

  8. [实战]MVC5+EF6+MySql企业网盘实战(17)——思考2

    写在前面 今天吃饭回来,突然有一个更好的想法,这里做一下记录. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战 ...

  9. bzoj 1833 数位dp

    很裸的数位dp. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #defi ...

  10. LeetCode 118. 杨辉三角

    118. 杨辉三角 给定一个非负整数numRows,生成杨辉三角的前numRows行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例 输入: 5 输出: [ [1], [1,1], [1,2 ...