第4章 源代码的下裁和编译

使用环境

1.需要Ubuntu 64bit,建议Ubuntu14.04 64-bit

安装Rope

1.打开终端输入

$ makdir ~/bin
$ PATH=~/bin:$PATH

2.完成后输入以下命令

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

下载源码

1.建立android源码存放目录

$ mkdir AOSP
$ cd AOSP

2.初始化git信息

$ git config --global user.name "Your Name"
$ git config --global user.email "Your@exampld.com"

3.初始化源码信息

$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r11

4.同步下载

$ repo sync -j8

 

之前我们所做的搭建编译环境与下载Android源码,其实最终都是为了能够顺利的把Android源码编译出来。准备工作做好了以后,今天咱们就来把之前下载好的源码编译一下吧。

凡是有官方指导文档的,我一定都要去看一下。Google当然也会指导我们如何编译源码了,https://source.android.com/source/building-running.html这里就是官方文档了。如果你想做一个合格的程序员,那么养成看官方文档的习惯是很重要的,虽然可能看起来并不是很舒服,但这一定是最权威的。

选择一个分支

Android系统从发布到现在已经有了许多个大版本,至于小版本那就更多了,可能已经上百个了,你需要选择一个想要编译的分支。当然了,这一步我们实际上是在下载Android源码的时候就已经决定了,好吧,我这里选择的是Android 5.1.1_r8的分支。

初始化

在Android源码的根目录(如/home/username/Android5.1.1_r8)执行

这里是使用envsetup.sh脚本来初始化环境。可以使用一个点“.”来代替source,这样的话可以节约输入命令的时间,在文档中Google比较推荐用这种更加简洁的方式。

选择编译目标

这里使用lunch命令来选择一个编译的目标,所谓的编译目标,其实就是指最终生成的镜像要运行在什么样的设备上,单独输入lunch命令后再按tab键,系统就会显示出一共可以选择哪些设备:

choose-build-target-device

其中,aosp代表Android Open Source Project——Android开源工程,实际上各个手机厂家就是利用aosp的代码,自己进行修改适配,其中比较重要的就是各个硬件的驱动的适配,然后再改一改Framework层,写一些自己的应用,就可以变成一个自己的手机“系统”了。第一个aosp_arm64-eng,arm代表这个选项的目标是arm架构的模拟器,64代表64位系统,eng代表engineer版本,也就是开发工程师的版本,包含一些debug的工具,方便调试。后缀为user代表这是可以用来正式发布到市场的版本,权限是被限制的(如没有root,没有debug),而userdebug版本则在user版本的基础上开放了root权限和debug的权限。

中间的字段,除了arm的,还有x86的——这个就顾名思义了跑在x86模拟器上的,而一些单词则实际上是Nexus设备的代号,如shamu代表了Nexus 6,hammerhead代表了Nexus 5等等。如果你没有这些设备,那么通常选择arm或者x86的模拟器版本,我手中有Nexus 5和6两部手机,而5已经成为我的开发测试机,所以我选择了hammerhead版本。

lunch-aosp-hammerhead-userdebug

看得出来,实际上这个lunch命令就是设定了一系列的环境变量。当然,如果你有兴趣的话,可以到build/envsetup.sh脚本里面看看lunch命令到底是怎么回事:

如果你对shell脚本有一定的了解,那么应该就能看出来lunch命令到底是怎么回事了。

编译源码

在GNU中编译源码可以用-jN参数来决定使用多少线程,一般来说,如果你的电脑(或者服务器)是4个核心8个线程的cpu,那么就可以使用make -j16这样的命令来编译。N太小速度会比较慢,N太大远远超过线程数2倍的时候则没什么作用。在这里我的输入是:

begin-to-build-android-source-code

这时候,编译就开始了。根据编译环境的性能不同,耗费的时间也是不一样的。一般来说,更先进的CPU、更快更大的内存以及是否有固态硬盘SSD这几个因素会有着决定性的影响。另外,更新的gcc编译器版本会对新一代cpu的指令有着更好的利用,效率会更高。通常Android源码的编译时间需要1个小时以上,如果要花费四五个小时甚至更久的朋友,需要考虑升级一下配置了。

如果之前的Java以及依赖包的安装比较顺利,那么这个编译过程通常也不会有什么问题。当然,凡事总会有意外,如果出现了什么错误,那就需要具体问题具体分析了。我这里很顺利的编译完成了,一共用了2个小时:

android-souce-code-compile-complete

 

http://www.cnblogs.com/zhuixinshaonian/

posted @ 2016-04-24 10:05  追鑫少年  阅读(412)  评论(0编辑  收藏  举报