Ubuntu 16.04下载编译Android 6.0源码及问题解决

在虚拟机里面跑了个虚拟机,预留了20G的空间,然后各种环境配不好(第一次玩Linux),弄了1day左右吧,终于开始下载了,还好可以科学上网,省了一点功夫。然后还没有写脚本,就苦逼的守在它下啊下。因为它指不定的会出错,需要repo sync。然后经过漫长的等待,本以为就等出了Success,结果等出了磁盘空间不足。然后只有忍痛把东西都删掉重头来过,接着又给Ubuntu分配了90G的空间,想着一定能够了,这次写了脚本,不用再苦逼的望着屏幕了。结果。。下了88G+的时候又提示空间不足。说句真的,当时砸电脑的心都有了。然后在StackOverflow看见有人给了Google官方的下载指南,进去一看吓我一跳,至少需要120G,我硬盘就500G,准备暂时放弃,先买个固态来着。但是不甘心啊!

1 编译环境
Ubuntu 16.04 LTS
Android 6.0_r1
Open JDK 7

2准备工作

(1) 下载Android 6.0源码.

注意:源码的存放路径不能有中文,否则编译到系统内置的apk的时候会报错无法解析class.dex文件

(2) 解压源码,合并文件。
下载完毕后,使用下面命令合并:

cat Android6_r1_*>Android6_r1

(3) 解压源码。

tar -zxvf Android6_r1.tgz

解压源码是个漫长的过程,解压后会在当前目录下生成一个mydroid的文件夹。

4 安装依赖
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential 
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386
sudo lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache

5 避免小坑在编译过程中如果host的默认编辑器时clang的话机就会导致: recipe for target ' out/host/linux-x86/obj/lib/libart.so'failed.

所以在开始编译之前需要把clang关掉,方法是在art/build/Android.common_build.mk ,中找到WITHOUT_HOST_CLANG,关闭clang即可。

ifneq ($(WITHOUT_HOST_CLANG),true)
改为:


ifeq ($(WITHOUT_HOST_CLANG),false)


7 开始编译

(1) 在 .bashrc文件末尾添加:export USE_CCACHE = 1

 

echo export USE_CCACHE=1 >> ~/.bashrc

(2) 为了提高编译效率,设置编译器高速缓存:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

(3) 接着导入编译Android源码所需的环境变量和其它参数:source build/envsetup.sh

Ubuntu 16.04下载编译Android 6.0源码及问题解决

(4) 运行lunch命令选择编译目标:

lunch

Ubuntu 16.04下载编译Android 6.0源码及问题解决

选择1:

Ubuntu 16.04下载编译Android 6.0源码及问题解决

(5) 开始编译,执行make -j8, 8为同时编译的线程数,一般google推荐这个数字为2倍的cpu个数再加上2,比如4核,就是10。

make -j8 关于cpu个数,可以用下面命令查看:

cat  /proc/cpuinfo好了,开始编译了.

8 编译成功

编译成功后如下图:

Ubuntu 16.04下载编译Android 6.0源码及问题解决

进入mydroid/out/target/product/generic目录,可以看到编译好的文件:

Ubuntu 16.04下载编译Android 6.0源码及问题解决

启动模拟器:

emulator 稍等一会,就可以出现开头的模拟器画面了:

Ubuntu 16.04下载编译Android 6.0源码及问题解决

9 其他的一些问题

当我成功启动之后,关机重来,试了试模块编译,然后再启动模拟器时,报错:emulator:未找到命令

解决办法:

build/envsetup.sh
lunch 1

终于可以开始愉快的学习了:)

相关推荐