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

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 编译成功

编译成功后如下图:

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

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

启动模拟器:

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

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

9 其他的一些问题

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

解决办法:

build/envsetup.sh
lunch 1

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

猜你喜欢

转载自www.linuxidc.com/Linux/2016-09/135017.htm