Ubuntu16.04下载编译Android6.0源码以及我所踩的坑

来源:互联网 发布:我与网络强国演讲稿 编辑:程序博客网 时间:2024/06/03 22:46

首先感谢 ”梧桐那时雨”的博客:http://blog.csdn.net/fuchaosz/article/details/51487585。

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

然后就看见了“梧桐那时雨”的博客,再次感谢。

1 编译环境

  • UbuntuKylin 16.04 LTS
  • Android 6.0_r1
  • Open JDK 7

2准备工作

(1) 下载Android 6.0源码.

Androdi 6.0源码下载地址: http://pan.baidu.com/s/1o6N86a2

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

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

<pre name="code" class="plain">cat Android6_r1_*>Android6_r1

(3) 解压源码。

tar -zxvf Android6_r1.tgz

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

4 安装依赖

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="plain">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-devsudo 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 ccachesudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4sudo zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 sudo lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">5 避免小坑</span>
在编译过程中如果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即可。

<pre name="code" class="plain">ifneq ($(WITHOUT_HOST_CLANG),true)

改为:

ifeq ($(WITHOUT_HOST_CLANG),false)

7 开始编译

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

echo export USE_CCACHE=1 >> ~/.bashrc

<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">(2) 为了提高编译效率,设置编译器高速缓存:</span>
<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="plain">prebuilts/misc/linux-x86/ccache/ccache -M 50G
<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">(3) 接着导入编译Android源码所需的环境变量和其它参数:</span>
<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="plain">source build/envsetup.sh
<img src="http://img.blog.csdn.net/20160526152459216" alt="这里写图片描述" title="" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" />

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

lunch

这里写图片描述

选择1:
这里写图片描述

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

make -j8

<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">关于cpu个数,可以用下面命令查看:</span>
<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="plain">cat  /proc/cpuinfo
<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">好了,开始编译了.</span>

8 编译成功

编译成功后如下图:


进入mydroid/out/target/product/generic目录,可以看到编译好的文件:
这里写图片描述

启动模拟器:

emulator

<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">稍等一会,就可以出现开头的模拟器画面了:</span>


9 其他的一些问题

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

解决办法:

build/envsetup.shlunch 1

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







0 0
原创粉丝点击