ubuntu12.04(64bit)编译android4.4源码、sdk及kernel

最近闲来无事,就想编译一下android源码折腾折腾。过程还算顺利,编译源码用了近3小时,编译sdk用了近30分钟。关于为什么要编译4.4的源码,而不编译5.0、6.0的源码,一是正好笔记本中有下载好的4.4源码;二是一些源码学习的资料大都是4.x、2.x的源码,而且4.4系统也是现在市场占有率最大的;三是基于4.4的源码编译,出现问题易于解决,因为大家都遇到过嘛(嘿嘿!)。

当然类似的文章教程很多,我主要是记录自己编译源码的过程以及遇到的一些问题,方便自己以后查看。

资源下载:ubuntu12.04系统、android4.4源码、jdk1.6.0_35、kernel源码

一.编译环境:

1.ubuntu12.04(64bit)

Paste_Image.png

2.android4.4源码(无.repo文件及kernel源码)
注:没有.repo也能编译

a.压缩包大小:


Paste_Image.png

b.解压后大小:


Paste_Image.png

c.编译源码及sdk后文件大小
Paste_Image.png

我的虚拟机64G的空间只剩下6.1G可用了>_< , 简友们要留足空间啊!

d.编译后android4.4文件目录:


Paste_Image.png

3.java版本

Paste_Image.png

二.编译源码,得到system.img

1.安装java

安装位置:


Paste_Image.png

设置java环境变量:

export JAVA_HOME=/usr/local/java/jdk1.6.0_35  
export JRE_HOME=/usr/local/java/jdk1.6.0_35/jre   
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH  
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH 

使用以下命令,就可以使用gedit打开etc目录下的profile文件添加环境变量

$ sudo gedit /etc/profile
Paste_Image.png

2.安装编译所需的包

注:大家先把这些包安装上,编译基本不会遇到问题,会很顺利。

sudo apt-get install git git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev 
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown 
sudo apt-get install libxml2-utils xsltproc gcc-multilib lib32readline5-dev

3.开始编译 ,源码的位置及命令如下图:

$ source build/envsetup.sh
$ make (也可以使用 make -j4 四线程编译)
Paste_Image.png

注:我使用的是make,没有加-jx ,用了三个小时,主要是我用的是虚拟机,不敢开太多的线程去编译,怕烧坏电脑_,下图是我的电脑编译源码的时候cpu的使用率,大部分时间在100%,有时会跳到200%

QQ20160310-1@2x.png

4.编译过程也不是一帆风顺,我遇到了第一个错误,如下

Traceback (most recent call last):
  File "frameworks/compile/libbcc/tools/build/gen-build-info.py", line 154, in <module>
    main()
  File "frameworks/compile/libbcc/tools/build/gen-build-info.py", line 111, in main
    build_rev = get_repo_revision(repo_dir)
  File "frameworks/compile/libbcc/tools/build/gen-build-info.py", line 39, in get_repo_revision
    cwd=repo_dir)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/BuildInfo.cpp] Error 1
make: *** Deleting file `out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/BuildInfo.cpp'

知道为什么吗?居然是git没有安装,晕... ,下面安装git

$ sudo apt-get install git

5.git安装好了,执行make,继续编译,等啊等... ,时间过去了2个多小时,迎来了第二个错误,囧... ,如下

Notice file: system/extras/timeinfo/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/timeinfo.txt
Install: out/target/product/generic/system/xbin/timeinfo
Copy xml: out/target/product/generic/system/etc/apns-conf.xml
/bin/bash: xmllint: command not found
make: *** [out/target/product/generic/system/etc/apns-conf.xml] Error 127

网上搜了搜,原因是少了libxml2-utils,安装libxml2-utils,如下

$ sudo apt-get install libxml2-utils

注:这只是我编译中遇到的一些问题,我已经在上面第二步的命令中补上了git和libxml2-utils,所以按照我的这个教程编译就不会再出现这两个问题了,不过也可能会遇到其他问题,毕竟每个人电脑的环境不可能完全一样。

6.耶!编译终于完成,看看我的编译完成界面截图

Paste_Image.png

生成system.img所在目录:

Paste_Image.png

7.ok,到这一步源码编译已经完成,我们可以运行模拟器了,如果我们上图的命令界面还在,可以直接输入命令 emulator,如下图:

$ emulator
Paste_Image.png

如果这个界面关了,也没关系,可以运行如下这些命令:

$ source build/envsetup.sh
$ lunch sdk-eng
$ emulator
Paste_Image.png

到这里模拟器成功启动,如下

QQ20160310-3@2x.png

三.编译sdk

1.运行如下命令:

$ source build/envsetup.sh
$ lunch sdk-eng
$ make sdk
Paste_Image.png

2.运行make sdk(或者make -j4 sdk加速编译)开始编译,10分钟过去了,错误终于来了,如下

Install: out/host/linux-x86/framework/liblzf.jar
## Running sdk/eclipse/scripts/create_all_symlinks.sh
### Starting tools/base: gradlew publishLocal
sdk/eclipse/scripts/create_all_symlinks.sh: line 285: cd: tools/base: No such file or directory
make: *** [out/host/linux-x86/obj/EXECUTABLES/monitor_intermediates/monitor] Error 1

报错很明显,toos/base这个目录或文件找不到,网上搜了下,答案是这个文件在.repo中,需要去同步下载更新,no no no...按照这个方法,什么时候才能下载下来,接着搜索,终于找到了一个粗暴而简单的的解决办法,不知道有没有后遗症;办法是把所有用到tools/base的地方都注释掉,文件所在路径如下:

/home/zhangyipeng/Documents/android4.4/sdk/eclipse/scripts/create_all_symlinks.sh

使用sublime text打开,找到所有tools/base的使用地方注释掉,继续make sdk,过了1分钟又来了一个错误,还是这个create_all_symlinks.sh文件中的tools/swt: No such file or directory ,继续把tools/swt相关的地方注释掉,
修改的几个地方如下图:


Paste_Image.png
Paste_Image.png

Paste_Image.png

接着make sdk,再继续在编译...

3.等了近20分钟,又出现了一个类似的错误:

Install: out/host/linux-x86/framework/liblzf.jar
## Running sdk/eclipse/scripts/create_all_symlinks.sh
### Starting tools/base: gradlew publishLocal
sdk/build/toos.atree: line 124: cd: tools/base: No such file or directory

文件位置:

/home/zhangyipeng/Documents/android4.4/sdk/build/toos.atree

修改如下图:

Paste_Image.png

以上问题参考网站:
http://blog.csdn.net/lincyang/article/details/48630185/
http://blog.sina.com.cn/s/blog_4ba5b45e0102ejyg.html

4.最后一次make sdk,大概10分钟过去了,终于迎来了胜利的曙光_

Paste_Image.png

生成的sdk所在位置:

Paste_Image.png

注:我们自己通过源码编译的sdk是最适合这套源码的sdk,以后编译其他功能可能会用到。也有可能会因为其他编译命令而把sdk删了,最好把编译好的sdk拷贝一份放置到源码外。

四.kernel编译

注意:编译完源码和sdk最好把整个源码备份一下,不然可能会因为一些命令把system.img删除了。那时就要重新编译,不过不需要3个小时那么久,只要编译过一次再次编译大概需要近半个小时。在编译kernel时我就遇到了这个问题,编译完kernel,居然找不到system.img了,到out中去找,果然被删除了,欲哭无泪>_< , 不过还好我有先见之名,我编译完sdk直接把真个虚拟机系统都拷贝了一份,整整62.53G。我实在不想重新编译源码了,也不想编译kernel了,就先把整个编译后的kernel也拷贝了一份到mac本机。然后把当前虚拟机删了,使用拷贝的虚拟机系统运行,然后把备份的kernel再拷贝到虚拟机中的源码下,这下可以终于可以使用自己编译的kernel运行模拟器了。


Paste_Image.png

1.在android4.4源码目录下,建一个空的kernel文件夹,把解压后的goldfish-android-goldfish-3.4文件夹移动到kernel目录下,如下图:

Paste_Image.png

2.进入goldfish-android-goldfish-3.4目录下,配置环境变量,运行如下命令:

export PATH=$PATH:/home/zhangyipeng/Documents/android4.4/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin  
Paste_Image.png

3.修改goldfish-android-goldfish-3.4目录下的Makefile文件,如下图:

#ARCH       ?= $(SUBARCH)
#CROSS_COMPILE  ?= $(CONFIG_CROSS_COMPILE:"%"=%)
#上面注释掉,加入下面的
ARCH ?= arm
CROSS_COMPILE     ?= arm-eabi-
Paste_Image.png
Paste_Image.png

4.在goldfish-android-goldfish-3.4目录下如下命令

$ make goldfish_armv7_defconfig 
Paste_Image.png

5.在goldfish-android-goldfish-3.4目录执行make命令:

$ make
Paste_Image.png

6.等了几分钟,编译完成


Paste_Image.png

在/home/zhangyipeng/Documents/android4.4/kernel/goldfish-android-goldfish-3.4/arch/arm/boot目录下多了两个文件,如下图:


Paste_Image.png

6.使用我们上一步编译的内核,运行模拟器,首先进入源码目录下,运行如下命令:

$ source build/envsetup.sh
$ lunch sdk-eng
#指定内核文件启动模拟器
$ emulator -kernel ./kernel/goldfish-android-goldfish-3.4/arch/arm/boot/zImage
Paste_Image.png

7.模拟器运行如下,可以看到预编译源码时的模拟器相比,内核已经变了


Paste_Image.png

模拟器运行的时候也可以使用如下命令查看内核:
注:找到我们上一步编译的SDK,进入到platform-tools目录下(最好把我们编译的sdk拷贝一份放到源码外)

$ ./adb shell
root@generic:/ # cd proc 
root@generic:/proc # cat version
Linux version 3.4.67 (zhangyipeng@ubuntu) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #1 PREEMPT Fri Mar 11 17:39:00 CST 2016
Paste_Image.png

8.对比源码中默认的内核与自己编译的内核的区别,如下图:

Paste_Image.png
Paste_Image.png

到此,编译过程终于结束了,耶!!!

注:所有需要的资源都已经在文章开头提供,如果你用我提供的这些资源编译源码、sdk及kernel,再按照我上面的过程一步一步的来,成功编译不在话下。各位简友可能注意到文件日期了,从截图就可以看出来,这篇文章是我这两天(16.3.10~16.3.11号)一边编译一边写的,绝对可靠。而且步骤也比较详细、完善(包含了源码编译、sdk编译、内核编译)。

10.如果编译完成了,想把源码导入到Android Studio中查看,请接着看下篇文章:
Android Studio导入android源码技巧(源码无需编译即可导入)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容