2016/10/21
中科大负责镜像的同学回复说问题已解决。2016/10/11
关于AOSP的镜像,中科大的目前不能正常使用。
可以暂时使用清华的源。
这是之前的笔记,主要记录了如何搭建Android源代码编译环境进行编译。里边有一些优化和问题的记录,可能会帮助大家更快地编译出来自己的Android系统。
系统与硬件
为了方便,我使用了VMWare虚拟机搭载Ubuntu 14.04作为我的操作系统。因为虚拟机确实比较方便,在这个硬盘便宜的时代,多占一些空间还是问题不大的。而且可以方便我们来回移动虚拟机,并且虚拟机文件在Windows系统和Mac OSX系统上都可以比较良好的运行。(Windows上用VMWare Workstation,Mac OSX上用VMWare Fusion,一家公司的产品,虚拟机文件兼容性没得说。)
虚拟机的硬盘空间我分配了上限120G(现在发现勉强够用,如果开ccache就有点够呛了),大家可以适当调大些。
内存根据你的实际情况,越大越好,因为在编译的后期很有可能会出现内存不足导致的编译失败。我分配了10G物理内存出来。
CPU核心也是看你的物理机的CPU,后边的”make -jN”命令里边的N和你的CPU核心数(总线程数)直接相关。
可以优化的地方
备份不同阶段的虚拟机
在某篇文章中看到这么一句话,”大家编译的时候总会遇到这样那样的问题,而且每次编译遇到的问题还不一样”。对这一点深有体会。所以我们可以在不同的阶段复制一份虚拟机文件作为备份,以后你想回到哪一个阶段都比较方便(或者你也可以把任何一个阶段的虚拟机分享给别人)。
为此,我专门买了一个大的移动硬盘存储了多份虚拟机文件。我备份了下面的几个阶段:
- 刚装好Ubuntu操作系统的(这个时候的系统文件最小,4-5G)
- 安装好安卓编译环境所需要的各种软件包并且代码下载完成(体积陡然变成40+G了)
- 编译好源代码的(我编译的是5.1.1,此时体积编程100+G了,还没有开ccache)
- …(个人喜好,可以备份任意阶段)
我并没有使用VM的快照功能,因为在操作虚拟机的时候都是直接将虚拟机文件复制到电脑的主硬盘上进行的,因为是SSD所以速度快一些,但是容量有限,所以能省则省。对于动辄几十G的操作变化来说,还是不要用快照了。
Ubuntu的源设置为中国
将Software&Updates的服务器切换到中国,我这里选择的是163
使用AOSP的国内镜像
网上找了一圈,发现了几个国内的镜像
- 中科大:https://lug.ustc.edu.cn/wiki/mirrors/help/aosp
- 清华大学:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
- 东软:http://mirrors.neusoft.edu.cn/more.we#android
这3个选择哪个呢?
东软的帮助里边只有SDK代理的配置,而没有AOSP的配置。
清华大学的同步源使用的是https协议,限制速度了,同步比较慢。
对比起来,中科大的源,速度较快,能达到5M+/S左右。下载源代码大概花了1个多小时,比Google源快太多了。
现在已经限制速度了,最快600K+/S左右
安装软件包
安装JDK
不同的分支需要不同的Java版本来进行编译
分支 | Java版本 |
---|---|
Master分支 | OpenJDK 8 |
5.x - 6.0分支 | OpenJDK 7 |
2.3.x - 4.4.x | Java JDK 6 |
这里我下载的是5.1.1版本的源代码,需要安装OpenJDK 7,安装指令如下
$ sudo apt-get install openjdk-7-jdk
如果你要下载Master分支的源代码,则需要安装OpenJDK 8,安装指令如下(推荐16.04)
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
14.04安装OpenJDK 8比较麻烦,具体参考For Ubuntu LTS 14.04
安装必要的软件包
Ubuntu 14.04需要的软件包如下
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip
配置USB访问
指令如下