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

本文详细记录了在Ubuntu16.04上下载、编译Android6.0源码的过程及遇到的问题。作者在编译过程中遭遇了磁盘空间不足、依赖安装、脚本编写等挑战,最终成功编译,并分享了避免错误的建议,如源码路径无中文、关闭clang、设置USE_CCACHE等。
摘要由CSDN通过智能技术生成

首先感谢 ”梧桐那时雨”的博客: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-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
 
<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="https://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.sh
lunch 1

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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值