Ubuntu12.04下载编译android4.4源码

        本文为原创,转载请注明出处:http://blog.csdn.net/helloaugust11/article/details/20568671

        写给想深入理解android的android开发爱好者。每个android开发爱好者,手头至少要有一份完整的Android源码,不管哪个版本。今天我给广大android开发人员推荐的是

Android4.4的源码下载和编译的全过程,解析的很详细包括了每个步骤和下载编译出错的解决方案。


        该博客主要挑重点叙述,更详细,详细的内容我已经写好了一个文档,下载阅读就ok。

        文档下载地址:http://download.csdn.net/detail/yxchen0811/6995527

       

 首先android4.4源码的下载步骤:

        

1.     安装下载的客户端

$ sudo apt-get install curl

$ sudo apt-get install git-core

2.     创建一个~/bin目录,并添加到环境变量中

$ mkdir ~/bin

$ PATH=~/bin:$PATH

3.     下载repo脚本且修改他的权限为可执行

$ curl http://git-repo.googlecode.com/files/repo-1.13 > ~/bin/repo

$ chmod a+x ~/bin/repo

4.     创建一个保存android源码的目录,修改为最大权限且进入到该目录下

$ /home/august/android4.4

$ sudo chmod –R 777 /home/august/android4.4

$ cd  /home/august/android4.4

PS:由于android下载过程中有个.repo的隐藏目录,这个目录很大(12G),下载到其他分区,估计硬盘不够用,如果你按照我前面的教程安装的虚拟机只有下载到home目录下才能下载完。创建目录时目录中的august是我本人的英文名。读者可以根据自己的喜好随便命名,这里是允许自由发挥的,除了这好像没有其他的,如果想一次成功,就需要按照我的步骤一步一步来。

5.     初始化repo客户端,选择将要下载的android版本

$ repo init -u https://android.googlesource.com/platform/manifest

PS:输入回车后,可能会看到需要你输入你的姓名和邮箱,姓名可以随便输入,但是邮箱最好是可用的且最好是gmail的邮箱,原因我也不清楚,网上这么说的。

6.     上面的所有工作都弄完成后,就开始下载源码了

$ repo sync


下载代码就这么简单,总共就6个步骤,其中还有个步骤是创建个文件夹,整个下载过程出奇的简单,但是这小6个步骤可能会折腾你好长时间。需要你不停的解决错误,不停的repo sync。哈哈,这个单词我在命令行敲了不下100遍,这个后面会讲到,可以使用个脚本让计算机自己来重复的执行这个操作,人类真是太聪明了,我不得不佩服啊。还是回到下载源码让我们痛苦的错误上来,你解决了这些问题,就可以安心的睡觉,明天早上起来看看是否已经成功下载完成。

出现的第一个问题是repo客户端的问题,提示什么,按照他的提示输入什么就ok了是不是很简单。

Q:“A new repo command ( 1.18) is available”

A: 按照提示输入就可以了,cd /home/august/android4.4/.repo/repo/repo  /home/august/bin/repo

Q: 出现类似提示 Cannotfetch platform/tools/motodev   Fetchingprojects:   3% (7/228)  fatal: Not a git repository   fatal: HTTP request failed  error: RPC failed; result=56, HTTP code =200B  fatal: The remote end hung upunexpectedly  fatal: early EOF  fatal: index-pack failed

A: 编辑/etc/hosts文件 在文件末尾增加

74.125.31.82 www.googlesource.com

74.125.31.82 android.googlesource.com

203.208.46.172 cache.pack.google.com

59.24.3.173 cache.pack.google.com

添加完这些源后(好像这样表述是不对),重新回到命令行输入 repo sync


当有一天你看到命令行出现如下所示的字样时,表示你已经下载完android4.4的所有代码了,你应该兴奋了,我终于下载完了。


避免多次重复输入repo sync,写一个脚本,执行脚本就ok了。脚本很简单,这里也给出脚本的源码。

#! /bin/bash

echo "=====start repo sync======" 

/home/august/android4.4/repo sync 

while [ $? = 1 ]; do 

echo “======sync failed, re-sync again======” 

sleep 3

/home/august/android4.4/repo sync

done

到这里下载源码的过程就结束了,但是这个下载的工程确实很漫长,需要你有足够的耐心。下载源码必须要确保你的磁盘够大,这个主要是针对一些已经安装好虚拟机的读者,因为你没有按照我的教程说的步骤操作,可能会出现下载的过程中硬盘不够用。下载中由于.repo目录很大,需要的空间在25G左右才能顺利的下载完成android4.4.


编译android4.4源码

源码下载完后,还有个比较重要的环节没有完成,当然是Android的编译了。可能由于版本的原因,每个版本的编译还略有点不一样。比如以前我编译4.2的时候需要gcc和g++的版本都要比ubuntu12.04带的要低,所以要进行一次降级处理,但是编译4.4的代码不需要降级,编译版本可能还是有点不一样吧,但是大体还是相同的。下面就进入编译的环节以及出现的错误解决方案。

编译比下载时需要输入的命令还更少,但是编译出现的错误却比下载出现的错误要更多,且耗时也较长,这个我记录下我的编译时间(CPU采用4核8线程)

17:35 2014/2/22 start build

19:16 2014/2/22 end build

编译android的步骤如下:

1.     初始化编译环境

$ source build/envsetup.sh

2.     选择需要编译的版本类型

$ lunch full-eng

3.     编译源码

$ make –jN

PS:N表示的是你创建虚拟机时cpu核心数,比如我的上图虚拟机的核心数为8,所以命令为 $ make –j8。即采用8核来编译源码。


编译就这么简单,就这3步骤,遇到的问题也会很多。下面将是遇到的问题按照先后顺序解答,读者也按照这个顺序,因为这个顺序是编译能通过的。

1.     Executing the followingcommands would install ia32-libs multiarch package.

 

Answer:

sudo apt-get update

sudo apt-get installia32-libs-multiarch:i386

PS: 此过程很慢,ubuntu下网速不好,下载耗时接近2个小时,耐心等待。

2.     /bin/bash: flex: command notfound

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:In function ‘int yyparse()’:

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1827:warning: deprecated conversion from string constant to ‘char*’

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1970:warning: deprecated conversion from string constant to ‘char*’

Lex: aidl <=frameworks/base/tools/aidl/aidl_language_l.l

/bin/bash: flex: command not found

make: ***[out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp]Error 127

 

Answer:

sudo apt-get install flex

PS:此过程大概3分钟

 

3.     /bin/bash: xmllint: command notfound

 

Answer:

sudo apt-get  install libxml2-utils

PS:此过程大概3分钟

 

4.     gcc: error trying to exec'cc1plus': execvp: No such file or directory

 

Answer:

sudo apt-get install g++

PS:此过程5分钟

 

5.     sh: gperf: not found

target Generated: libwebcore <=external/webkit/Source/JavaScriptCore/create_regex_tables

Generating CSSPropertyNames.h <=CSSPropertyNames.in

sh: gperf: not found

calling gperf failed: 32512 at./makeprop.pl line 140.

make: ***[out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h]Error 25

make: *** Deleting file`out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h'

 

Answer:

sudo apt-get install gperf

PS:此过程不到1分钟

 

6.     /bin/bash: bison: command notfound

Yacc: aidl <=frameworks/base/tools/aidl/aidl_language_y.y

bison -d  -oout/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cppframeworks/base/tools/aidl/aidl_language_y.y

/bin/bash: bison: command not found

make: ***[out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp]Error 127

 

Answer:

sudo apt-get install bison

PS:此过程很快1分钟内

 

解决了上面的所有的问题,基本能顺利的一次通过android4.4源码的编译。这时候你需要等待的时间大概2个小时左右。


编译成功

编译成功之后,会在out/target/product/generic下面看到system.img, ramdisk.img, userdata.img


如果在该目录下没有看到上面的3个img文件,说明编译没有成功。需要重新检查编译出现的问题。


运行模拟器

$ emulator

源码编译成功后,生成的system.img就是可以刷机用的system。这里我们采用命令来启动模拟器,看看Android4.4的庐山真面目。

运行命令后可能会出现一个ERROR:

Q:No command'emulator' found, did you mean:Command 'qemulator' from package 'qemulator'(universe) emulator: command not found

A:重新运行以下命令:

source build/envsetup.sh

lunch full-eng

emulator

运行上面的命令后能顺利的启动模拟器,下面是启动模拟器的截图:





至此,整个Android源码,下载和编译都完成了,你可以自由定制修改android代码,实现自己的私人定制Android ROM,同时你也查看源代码,和Google大神近距离的接触,体会和感受Google大神是怎样书写高质量的代码。


更详细的文档图文并茂解析下载和编译的全过程,请点击下载该文档:http://download.csdn.net/detail/yxchen0811/6995527

本文为原创,转载请注明出处:http://blog.csdn.net/helloaugust11/article/details/20568671


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值