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
(4) 运行lunch命令选择编译目标:
lunch
选择1:
(5) 开始编译,执行make -j8, 8为同时编译的线程数,一般google推荐这个数字为2倍的cpu个数再加上2,比如4核,就是10。
make -j8 关于cpu个数,可以用下面命令查看:
cat /proc/cpuinfo好了,开始编译了.
8 编译成功
编译成功后如下图:
进入mydroid/out/target/product/generic目录,可以看到编译好的文件:
启动模拟器:
emulator 稍等一会,就可以出现开头的模拟器画面了:
9 其他的一些问题
当我成功启动之后,关机重来,试了试模块编译,然后再启动模拟器时,报错:emulator:未找到命令
解决办法:
build/envsetup.sh
lunch 1
终于可以开始愉快的学习了:)