ubuntu12.04(64bit)編譯android4.4源碼窑滞、sdk及kernel

最近閑來(lái)無(wú)事琼牧,就想編譯一下android源碼折騰折騰。過(guò)程還算順利葛假,編譯源碼用了近3小時(shí)障陶,編譯sdk用了近30分鐘。關(guān)于為什么要編譯4.4的源碼聊训,而不編譯5.0抱究、6.0的源碼,一是正好筆記本中有下載好的4.4源碼带斑;二是一些源碼學(xué)習(xí)的資料大都是4.x鼓寺、2.x的源碼,而且4.4系統(tǒng)也是現(xiàn)在市場(chǎng)占有率最大的勋磕;三是基于4.4的源碼編譯妈候,出現(xiàn)問(wèn)題易于解決,因?yàn)榇蠹叶加龅竭^(guò)嘛(嘿嘿挂滓!)苦银。

當(dāng)然類似的文章教程很多,我主要是記錄自己編譯源碼的過(guò)程以及遇到的一些問(wèn)題赶站,方便自己以后查看幔虏。

資源下載:ubuntu12.04系統(tǒng)、android4.4源碼贝椿、jdk1.6.0_35想括、kernel源碼

一.編譯環(huán)境:

1.ubuntu12.04(64bit)

Paste_Image.png

2.android4.4源碼(無(wú).repo文件及kernel源碼)
注:沒(méi)有.repo也能編譯

a.壓縮包大小:


Paste_Image.png

b.解壓后大欣硬:


Paste_Image.png

c.編譯源碼及sdk后文件大小
Paste_Image.png

我的虛擬機(jī)64G的空間只剩下6.1G可用了>_< , 簡(jiǎn)友們要留足空間吧凇!

d.編譯后android4.4文件目錄:


Paste_Image.png

3.java版本

Paste_Image.png

二.編譯源碼渣窜,得到system.img

1.安裝java

安裝位置:


Paste_Image.png

設(shè)置java環(huán)境變量:

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打開(kāi)etc目錄下的profile文件添加環(huán)境變量

$ sudo gedit /etc/profile
Paste_Image.png

2.安裝編譯所需的包

注:大家先把這些包安裝上,編譯基本不會(huì)遇到問(wèn)題乔宿,會(huì)很順利夷都。

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.開(kāi)始編譯 ,源碼的位置及命令如下圖:

$ source build/envsetup.sh
$ make (也可以使用 make -j4 四線程編譯)
Paste_Image.png

注:我使用的是make,沒(méi)有加-jx 囤官,用了三個(gè)小時(shí)冬阳,主要是我用的是虛擬機(jī),不敢開(kāi)太多的線程去編譯党饮,怕燒壞電腦_肝陪,下圖是我的電腦編譯源碼的時(shí)候cpu的使用率,大部分時(shí)間在100%刑顺,有時(shí)會(huì)跳到200%

QQ20160310-1@2x.png

4.編譯過(guò)程也不是一帆風(fēng)順氯窍,我遇到了第一個(gè)錯(cuò)誤,如下

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沒(méi)有安裝,暈... 狼讨,下面安裝git

$ sudo apt-get install git

5.git安裝好了,執(zhí)行make,繼續(xù)編譯柒竞,等啊等... 政供,時(shí)間過(guò)去了2個(gè)多小時(shí),迎來(lái)了第二個(gè)錯(cuò)誤朽基,囧... 布隔,如下

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

網(wǎng)上搜了搜,原因是少了libxml2-utils稼虎,安裝libxml2-utils衅檀,如下

$ sudo apt-get install libxml2-utils

注:這只是我編譯中遇到的一些問(wèn)題,我已經(jīng)在上面第二步的命令中補(bǔ)上了git和libxml2-utils霎俩,所以按照我的這個(gè)教程編譯就不會(huì)再出現(xiàn)這兩個(gè)問(wèn)題了哀军,不過(guò)也可能會(huì)遇到其他問(wèn)題,畢竟每個(gè)人電腦的環(huán)境不可能完全一樣打却。

6.耶杉适!編譯終于完成,看看我的編譯完成界面截圖

Paste_Image.png

生成system.img所在目錄:

Paste_Image.png

7.ok学密,到這一步源碼編譯已經(jīng)完成,我們可以運(yùn)行模擬器了传藏,如果我們上圖的命令界面還在腻暮,可以直接輸入命令 emulator,如下圖:

$ emulator
Paste_Image.png

如果這個(gè)界面關(guān)了,也沒(méi)關(guān)系毯侦,可以運(yùn)行如下這些命令:

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

到這里模擬器成功啟動(dòng)哭靖,如下

QQ20160310-3@2x.png

三.編譯sdk

1.運(yùn)行如下命令:

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

2.運(yùn)行make sdk(或者make -j4 sdk加速編譯)開(kāi)始編譯,10分鐘過(guò)去了侈离,錯(cuò)誤終于來(lái)了试幽,如下

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

報(bào)錯(cuò)很明顯,toos/base這個(gè)目錄或文件找不到卦碾,網(wǎng)上搜了下铺坞,答案是這個(gè)文件在.repo中起宽,需要去同步下載更新,no no no...按照這個(gè)方法济榨,什么時(shí)候才能下載下來(lái)坯沪,接著搜索,終于找到了一個(gè)粗暴而簡(jiǎn)單的的解決辦法擒滑,不知道有沒(méi)有后遺癥腐晾;辦法是把所有用到tools/base的地方都注釋掉,文件所在路徑如下:

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

使用sublime text打開(kāi)丐一,找到所有tools/base的使用地方注釋掉藻糖,繼續(xù)make sdk,過(guò)了1分鐘又來(lái)了一個(gè)錯(cuò)誤库车,還是這個(gè)create_all_symlinks.sh文件中的tools/swt: No such file or directory ,繼續(xù)把tools/swt相關(guān)的地方注釋掉巨柒,
修改的幾個(gè)地方如下圖:


Paste_Image.png
Paste_Image.png

Paste_Image.png

接著make sdk,再繼續(xù)在編譯...

3.等了近20分鐘凝颇,又出現(xiàn)了一個(gè)類似的錯(cuò)誤:

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

以上問(wèn)題參考網(wǎng)站:
http://blog.csdn.net/lincyang/article/details/48630185/
http://blog.sina.com.cn/s/blog_4ba5b45e0102ejyg.html

4.最后一次make sdk,大概10分鐘過(guò)去了潘拱,終于迎來(lái)了勝利的曙光_

Paste_Image.png

生成的sdk所在位置:

Paste_Image.png

注:我們自己通過(guò)源碼編譯的sdk是最適合這套源碼的sdk,以后編譯其他功能可能會(huì)用到拧略。也有可能會(huì)因?yàn)槠渌幾g命令而把sdk刪了芦岂,最好把編譯好的sdk拷貝一份放置到源碼外。

四.kernel編譯

注意:編譯完源碼和sdk最好把整個(gè)源碼備份一下垫蛆,不然可能會(huì)因?yàn)橐恍┟畎裺ystem.img刪除了禽最。那時(shí)就要重新編譯,不過(guò)不需要3個(gè)小時(shí)那么久袱饭,只要編譯過(guò)一次再次編譯大概需要近半個(gè)小時(shí)川无。在編譯kernel時(shí)我就遇到了這個(gè)問(wèn)題,編譯完kernel虑乖,居然找不到system.img了懦趋,到out中去找,果然被刪除了疹味,欲哭無(wú)淚>_< 仅叫, 不過(guò)還好我有先見(jiàn)之名,我編譯完sdk直接把真?zhèn)€虛擬機(jī)系統(tǒng)都拷貝了一份糙捺,整整62.53G诫咱。我實(shí)在不想重新編譯源碼了,也不想編譯kernel了洪灯,就先把整個(gè)編譯后的kernel也拷貝了一份到mac本機(jī)坎缭。然后把當(dāng)前虛擬機(jī)刪了,使用拷貝的虛擬機(jī)系統(tǒng)運(yùn)行,然后把備份的kernel再拷貝到虛擬機(jī)中的源碼下掏呼,這下可以終于可以使用自己編譯的kernel運(yùn)行模擬器了坏快。


Paste_Image.png

1.在android4.4源碼目錄下,建一個(gè)空的kernel文件夾哄尔,把解壓后的goldfish-android-goldfish-3.4文件夾移動(dòng)到kernel目錄下假消,如下圖:

Paste_Image.png

2.進(jìn)入goldfish-android-goldfish-3.4目錄下,配置環(huán)境變量岭接,運(yùn)行如下命令:

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目錄執(zhí)行make命令:

$ make
Paste_Image.png

6.等了幾分鐘鸣戴,編譯完成


Paste_Image.png

在/home/zhangyipeng/Documents/android4.4/kernel/goldfish-android-goldfish-3.4/arch/arm/boot目錄下多了兩個(gè)文件啃沪,如下圖:


Paste_Image.png

6.使用我們上一步編譯的內(nèi)核,運(yùn)行模擬器窄锅,首先進(jìn)入源碼目錄下创千,運(yùn)行如下命令:

$ source build/envsetup.sh
$ lunch sdk-eng
#指定內(nèi)核文件啟動(dòng)模擬器
$ emulator -kernel ./kernel/goldfish-android-goldfish-3.4/arch/arm/boot/zImage
Paste_Image.png

7.模擬器運(yùn)行如下,可以看到預(yù)編譯源碼時(shí)的模擬器相比入偷,內(nèi)核已經(jīng)變了


Paste_Image.png

模擬器運(yùn)行的時(shí)候也可以使用如下命令查看內(nèi)核:
注:找到我們上一步編譯的SDK追驴,進(jìn)入到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.對(duì)比源碼中默認(rèn)的內(nèi)核與自己編譯的內(nèi)核的區(qū)別,如下圖:

Paste_Image.png
Paste_Image.png

到此疏之,編譯過(guò)程終于結(jié)束了殿雪,耶!7孀Α丙曙!

注:所有需要的資源都已經(jīng)在文章開(kāi)頭提供,如果你用我提供的這些資源編譯源碼其骄、sdk及kernel亏镰,再按照我上面的過(guò)程一步一步的來(lái),成功編譯不在話下拯爽。各位簡(jiǎn)友可能注意到文件日期了索抓,從截圖就可以看出來(lái),這篇文章是我這兩天(16.3.10~16.3.11號(hào))一邊編譯一邊寫的毯炮,絕對(duì)可靠逼肯。而且步驟也比較詳細(xì)、完善(包含了源碼編譯否副、sdk編譯汉矿、內(nèi)核編譯)崎坊。

10.如果編譯完成了备禀,想把源碼導(dǎo)入到Android Studio中查看,請(qǐng)接著看下篇文章:
Android Studio導(dǎo)入android源碼技巧(源碼無(wú)需編譯即可導(dǎo)入)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曲尸,隨后出現(xiàn)的幾起案子赋续,更是在濱河造成了極大的恐慌,老刑警劉巖另患,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纽乱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡昆箕,警方通過(guò)查閱死者的電腦和手機(jī)鸦列,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹏倘,“玉大人薯嗤,你說(shuō)我怎么就攤上這事∠吮茫” “怎么了骆姐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)捏题。 經(jīng)常有香客問(wèn)我玻褪,道長(zhǎng),這世上最難降的妖魔是什么公荧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任带射,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹬癌。我一直安慰自己叨粘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布桥爽。 她就那樣靜靜地躺著,像睡著了一般昧识。 火紅的嫁衣襯著肌膚如雪钠四。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天跪楞,我揣著相機(jī)與錄音缀去,去河邊找鬼。 笑死甸祭,一個(gè)胖子當(dāng)著我的面吹牛缕碎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播池户,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼咏雌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凡怎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赊抖,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤统倒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后氛雪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體房匆,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年报亩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浴鸿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弦追,死狀恐怖赚楚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骗卜,我是刑警寧澤宠页,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站寇仓,受9級(jí)特大地震影響举户,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遍烦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一俭嘁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧服猪,春花似錦供填、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至膳帕,卻和暖如春粘捎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背危彩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工攒磨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汤徽。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓娩缰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親谒府。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拼坎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容