此前编译过Android4.4的源码,可是如今Android都到了7.0的版本,不由让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,因而在过去的24小时里,毅然花了9个小时编译了一把Android6.0的源码,可是昨天编译完以后已经很晚了,没来得及记录编译的步骤,今天才慢悠悠地来记录一下我在Ubuntu Server14.04上编译Android6.0源码的步骤。好了,废话很少说,咱们开始吧!java
步骤一:python
安装Ubuntu系统。咱们既能够经过虚拟机的方式安装Ubuntu,也能够直接在电脑上安装,为了得到更好的Linux操做体验,我建议直接在电脑上面安装Ubuntu,我在本身电脑上安装了win10和Ubunut Server14.04双系统,使用的时候能够根据本身的须要随时切换系统,很是方便。关于如何搭建双系统,网上有不少教程,我就不在此叙述了,可是我想说明的一点是在安装Ununtu的时候,分配给Ubuntu的磁盘空间必定要尽量大一点,至少60G,我分配了105G,编译完成以后还剩下50多G,也就是说差很少用了近50G的空间,因此安装Ubuntu的时候必定得分配大一点的磁盘空间,否则编译会由于空间不足而中断。linux
步骤二:android
搭建好Ubuntu系统以后,咱们须要下载一份Android6.0的源码,网上不少文章都介绍了如何经过repo的方式来下载源码,可是经过这种方式下载速度可能并非很理想,我是直接下载的别人已经上传到百度云的Android6.0源码,下载地址:http://pan.baidu.com/s/1o6N86a2#path=%252F。git
由于Android6.0的源码所占空间很是大,因此上传者把Android源码分红了不少个文件,待所有下载完毕以后,咱们能够经过命令把这些分开的文件合并为一个文件。markdown
步骤三:curl
若是咱们是在Windows上下载的源码,那么当咱们打开Ubuntu以后,要作的第一件事请就是把Windows中的Android源码拷贝到Ubuntu系统下面,我直接利用复制粘贴的方式将源码拷贝到了Ubuntu的Home目录下面,拷贝以后的目录结构Home/android6_r1/各个分开的源码文件。flex
步骤四:ui
合并这些被分开的源码文件。咱们按下键盘上的ctrl + alt + T打开控制台,经过cd命令进入到Home/android6_r1/目录下面,而后执行命令:cat Android6_r1_* > M.tgz,不用多久,在Home/android6_r1/目录下面就会生成一个新的文件——M.tgz,M.tgz就是合并以后的压缩文件。url
步骤五:
解压步骤四生成的压缩文件。一样是在Home/android6_r1/目录下面,咱们在控制台执行命令:tar zxvf M.tgz,开始解压。解压的过程大概须要20分钟左右的时间,请耐心等待。解压好了以后,在Home/android6_r1/会生成一个mydroid的文件夹,这个文件夹就是Android源码的根文件夹了,里面有abi、devices、hardware、packages、sdk、art等文件夹和文件。
步骤六:
安装编译源码所须要的软件。在控制台中咱们经过cd..命令退回到Unbuntu用户的根目录下,而后依次执行如下命令:
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
以上命令每一条都必须分开单独执行,目的是为了获取1.7版本的jdk并设置环境变量。当咱们安装完Ubuntu以后可能会自带一个jdk,可是若是用自带的jdk编译Android源码极可能会提示jdk版本不符合要求的错误,所以咱们须要从新下载1.7版本的jdk,我用openjdk-7-jdk编译未出现任何问题。
接下来继续执行如下命令,一样每一行都是分开单独执行的:
sudo apt-get install git gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386
sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
以上命令主要是安装编译源码时须要用到的各类软件,若是没有安装这些软件,编译的过程当中会提示缺乏必要的软件而没法继续编译,所以,在正式编译源码以前,必定要先安装这些软件。
步骤七:
开始编译。在控制台中经过cd命令进入到Home/android6_r1/mydroid/目录下,而后执行命令:source build/envsetup.sh,导入编译Android源码所需的环境变量和其它参数。
步骤八:
在控制台中执行命令:lunch,运行命令以后会提示咱们选择编译目标。这里我选择的的默认目标,即aosp_arm_eng。
步骤九:
在控制台中执行命令:make -j8,开始编译。注意,make -j8命令中的数字8和咱们电脑的CPU核心数以及线程数有关系,通常这个数字的数值最大不能超过CPU线程数的2倍,例如我电脑的处理器是i5 6200U,为双核四线程,所以编译Android源码的时候,我能够设置的最大工做线程数量为4 * 2 = 8。在执行make命令的时候咱们应该根据本身的CPU参数设置合理的工做线程数值。
以上步骤执行完以后,就是一段很是漫长的等待了,我从中午十二点多开始编译,一直到晚上九点多编译完成,整个编译过程耗时九个多小时,幸亏个人运气还不错,编译过程当中没有出现任何错误,只是中途意外中断了一次,可是Android源码是能够接着上次中断的位置继续编译的,已经编译的部分不会重复编译,所以并未对我形成大的影响。同志们,我想说的是,编译的过程当中必定要有耐心哟!
整个源码编译完成以后,若是提示以下信息,那么Congratulations, you are successful!!!
此时,你能够直接执行命令:emulator,执行以后将会出现android模拟器的界面,如图:
OK,至此Android6.0源码的编译就大功告成了,接下来咱们就能够为所欲为地阅读和修改源码内容,定制本身心目中的Android系统了!