事前准备
从这里开始修改Android系统。我相信更多的学生可以玩更多的游戏。(威廉莎士比亚)(美国电视剧《Northern Exposure》)。
android是开源的,在源代码里没有秘密。
同学们可以去修改系统,做成自己喜欢的样子。做汽车的车机,到家里面的物联网系统。你可以改一个iOS一样的UI出来,也可以改一个跟Windows一样的UI出来。
前期准备:
做android开发,最好可以访问到google的网站!这样子你才可以访问AOSP的网站
什么是AOSP呢,原单词是:android open source project. 安卓开源项目
硬件方面
电脑配置尽量高一点,我用的mac(客户端)+服务器(两个E5的CPU+32G内存)机械硬盘也OK,同事做过实验,编译的瓶颈不在IO,另外一个服务器是1T的固态硬盘。
同学们的电脑一般i7就够用了,第一次编译时间长一点,后果面是增量编译,不需要太多的时间(5~10分钟左右)。
软件方面
在官网里有说明
setup/build/initializing.html
1、系统要求
编译android系统使用Mac系统或者Ubuntu系统。
您必须使用 Linux 或 Mac OS。目前不支持在 Windows 环境下进行编译
我们这里推荐使用Ubuntu 14.04,我服务器上的也是这个版本。
2、工具软件
1)JDK,做android开发的同学肯定会配置这个的,如果不会配置这个的同学,先去学习基础。
jdk稍微注意一下,6.0是要1.7.x的版本7.0以上的是1.8+,目前我测试了这两个版本。
2)安装所需要的软件,官方直接提供了在线安装命令:
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 libgl1-mesa-dev libxml2-utils xsltproc unzip
3)安装 Repo
创建一个bin目录,你可以放在自己用户的home目录下面,并且当这个bin添加到环境变量中去。
mkdir ~/bin
PATH=~/bin:$PATH
下载repo,并且修改它的权限
curl > ~/bin/repo
chmod a+x ~/bin/repo
同学们知道repo有什么用的吗?我的理解是repo是用来管理git的,而git用来管理android系统里面的各个模块(单独的应用/模块)
android系统是一个很庞大的系统,里面有很多单独的应用,也有很多不同的模块。而每个单独的模块或者应用是用git来管理。而repo则是用来管理git的。
repo也会提升效率,比如说你一个repo指令,就可以让所有的git同时去拉代码。可以查看所有项目的改变状态,等等.
Android系统代码下载
有了前面的软件和硬件准备,我们就可以下载系统源码了。
1)创建文件夹,一般来说,我习惯用android版本号来命名,下面我们下载android5.1的系统为例子,这些版本去哪里看呢?当然是官网,由此可见,能上google是多么重要的事情呢。
mkdir 文件夹名称
mkdir android5.1
进入当前文件夹
cd android5.1
2)初始化,关联到远程仓库。如果没法访问google,可以使用清华镜像,或者中科大的镜像地址,这样下载速度也比较快。
清华镜像地址:
中科大镜像地址:
以下是清华大学的,格式是:repo init -u -b 版本号
版本号可以到这里去查看:
官网:
setup/start/build-numbers.html#source-code-tags-and-builds
初始repo仓库
repo init -u -b android-4.0.1_r1
我们这里下载5.1的系统代码,我直接在系统上操作吧,这里的-u就是url,-b则是分支,branch
repo init -u -b android-5.1.0_r1
接着我们就可以同步代码了:
repo sync
也可以加上参数,这里的话就不要加了,并发太高的话别人就没法用了。
这样子就在同步代码了,具体要下载多久代码,那就看网速了。
可以晚上放着,第二天起床,没有什么问题的话,应该就可以了。
下载完成的样子:
系统编译
我们下载完源码以后,就会得到这样一份目录的代码了:
编译系统分几步呢?
我们先不分析这些文件夹有什么用,后面我们修改代码的时候才去进行说明。
系统编译
第一步:把脚本载入到环境中
source build
第二步:加载要编译的目标版本
第三步:编译系统
我这里使用了make -j40
这个40就是你cpu的线程数的2倍。我的CPU是20线程,所以我用40,一般个人电脑的话,使用8/16就OK啦。看自己的配置即可。
等待系统编译完成,i7的顶配CPU大概1个小时左右,服务器快一点45分钟左右。
编译结果
编译完成以后,则会如下显示:
看到上面这个,就是编译成功了!耗时一个小时9分钟,31秒
编译完成以后,就会多一个out目录
至于跑起这个系统来,大家自己跑吧,因为我的系统是没有UI的。
运行自己编译出来的系统,通过以下命令启动模拟器即可
emulator
源码下载地址:
提取码:at1k
这个是我今天编译的android7.1.1,以上是5.1的代码下载和编译。套路是一样的,环境搭建,下载源码,编译。至于增量编译,单独编译那些,我们后面再单独分析吧。
总结
android系统编译分为:环境搭建,下载源码,编译系统。
在编译系统的时候,我们用到了几个命令,source 这个其实就是把控制编译的脚本载入到环境中,可以直接使用里面的命令。其中我们的lunch也是里面的命令。而这个脚本是shell脚本。
打开脚本可以看到上面的说明。
也就是说,顺序不可以乱,必须先把脚本载入到系统环境中。
第二个是lunch,参数你填写编号可以,写名称也可以。
user,userdebug,eng各是什么意思呢?
以下是官网的说明:
最后就是make啦,-j表示编译并发量,google的推荐是cpu线程数的2倍。我有验证过,太高了或者太低了会影响速度。