fedora 18 源碼編譯 android 4.0.1

一、編譯環境:

系統:fedora 18 KED 桌面  (Fedora-18-i686-Live-KDE.iso)html

處理器:酷睿i5雙核 java

內存: 4GBlinux

硬盤:46GBandroid

java版本:java version "1.6.0_37"    javac 1.6.0_37git

gcc 版本: 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)web

make版本:GNU Make 3.81vim

 

因爲java版本不對,直接提示不能編譯,到這下載相應的java版本windows

http://www.oracle.com/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.htmlbash

make的版本也不對,下載一個老版本的安上:oracle

http://ftp.gnu.org/gnu/make/

(最後爲了防止系統每次自動把make更新,在/etc/yum.conf裏再添加一行來過濾掉make的自動升級  exclude=make* gcc* java*)

gcc 的版本與推薦的版本不符合,原本想從新裝一個gcc4.4,結果弄了半天沒有成,因而放棄。

2、下載源代碼:

首先到android官網找到下載教程:

android 官網推薦的系統是使用 Ubuntu 10.04,可是個人linux版本是fedora 18 ked ,不想用虛擬機(太慢),也不想再安裝一個系統,就在fedora 18裏面湊合弄吧!

http://source.android.com/source/building.html

各個android版本:https://android.googlesource.com/platform/manifest/+refs

按照官網上的教程,到repo sync這一步的時候老是出現連接錯誤,下載失敗的狀況:

error: Failed connect to android.googlesource.com:443;Connection refused while accessinghttps://android.googlesource.com/a/platform/frameworks/base/info/refs
fatal: HTTP request failed
error: Cannot fetch platform/tools/motodev
error: Cannot fetch platform/frameworks/base
error: Cannot fetch platform/prebuilts/sdk
error: Exited sync due to fetch errors

解決方法:編輯/etc/hosts文件

$ vim /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.173cache.pack.google.com

而後又在網上找到了一個下載小腳本:

在工做目錄新建腳本 download.sh

#!/bin/bash
    echo "======start repo sync======"
    repo sync
    while [ $? == 1  ]; do
    echo "======sync failed, re-sync again======"
    sleep 3
    repo sync
done

chomd a+x download.sh讓其能夠運行,而後終端輸入./download.sh就能夠開始下載了,用這一步代替官方文檔裏的repo sync。
當鏈接不上終端時休息3毫秒而後再自動repo sync,這樣就很完美了。

下載時間視網速而定,我選擇的是android 4.0.1版本,下載完後用

du -h 

查看了一下,代碼量有19GB之多!

上一次重裝fedora 18 就是由於adnroid源代碼沒有下載完成系統的磁盤沒有容量了,(上次的/分區是20GB,此次給分了50GB)結果此次用命令查看了一下,目測還要悲劇:

df -h 

剩餘磁盤容量不足15GB了。要是正編譯着沒有空間了該讓我咋辦啊!

下一步就是make了

3、編譯源碼:

輸入命令:make -j4 

-j4 選項是使用多個CPU核心去make(cpu有幾個核心就能夠寫幾,個人是雙核的虛擬4核)

不一會就提示錯誤,大多數錯誤均可以在此找到解答

https://groups.google.com/forum/#!searchin/android-building/KeyedVector/android-building/2EwtWQTqjdI/fbZlzXErscwJ

http://blog.csdn.net/justwandering/article/details/8843760 

 

 此錯誤的解決方法:

 

Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp] Error 2  
make: *** Waiting for unfinished jobs....  
target Generated: libwebcore <= external/webkit/Source/WebCore/platform/ColorData.gperf  
Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/platform/ColorData.cpp] Error 2  
target Generated: libwebcore <= external/webkit/Source/WebCore/html/parser/HTMLEntityNames.in  

 

進入external/webkit的目錄,打下面的patch

(補丁的使用參考:http://linux-wiki.cn/wiki/zh-hans/%E8%A1%A5%E4%B8%81(patch)%E7%9A%84%E5%88%B6%E4%BD%9C%E4%B8%8E%E5%BA%94%E7%94%A8

 

diff --git a/Source/WebCore/make-hash-tools.pl b/Source/WebCore/make-hash-tools.pl
index 37639eb..2968beb 100644
--- a/Source/WebCore/make-hash-tools.pl
+++ b/Source/WebCore/make-hash-tools.pl
@@ -20,7 +20,8 @@
 #   Boston, MA 02110-1301, USA.
 
 use strict;
-use Switch;
+# use Switch;
+use feature qw(switch);
 use File::Basename;
 
 my $outdir = $ARGV[0];
@@ -28,9 +29,9 @@ shift;
 my $option = basename($ARGV[0],".gperf");
 
 
-switch ($option) {
+given ($option) {
 
-case "DocTypeStrings" {
+when ("DocTypeStrings") {
 
     my $docTypeStringsGenerated    = "$outdir/DocTypeStrings.cpp";
     my $docTypeStringsGperf        = $ARGV[0];
@@ -40,7 +41,7 @@ case "DocTypeStrings" {
 
 } # case "DocTypeStrings"
 
-case "ColorData" {
+when ("ColorData") {
 
     my $colorDataGenerated         = "$outdir/ColorData.cpp";
     my $colorDataGperf             = $ARGV[0];

 

各類編譯錯誤這是夠折磨人的,最後終於 done!

到 out 目錄裏面看一下佔用的空間大小:

 

[root@localhost out]# du -sh
13G     .
[root@localhost out]# df -h
文件系統                 容量  已用  可用 已用% 掛載點
devtmpfs                 1.5G     0  1.5G    0% /dev
tmpfs                    1.5G  476K  1.5G    1% /dev/shm
tmpfs                    1.5G   11M  1.5G    1% /run
tmpfs                    1.5G     0  1.5G    0% /sys/fs/cgroup
/dev/mapper/fedora-root   46G   43G  845M   99% /
tmpfs                    1.5G   76K  1.5G    1% /tmp
/dev/sda10               485M   95M  365M   21% /boot

 

而後發現磁盤總剩餘空間也不足了。

四、運行模擬器:

接下來運行一下編譯的結果

設置一個新的環境變量:

ANDROID_PRODUCT_OUT=home/android/out/target/product/generic (這個目錄應該是你的源碼的絕對路徑)

export ANDROID_PRODUCT_OUT

到/home/android/out/host/linux-x86/bin 目錄下,運行

./emulator -system system.img -data userdata.img -ramdisk ramdisk.img

編譯出來的內核就能夠啓動了,如下是模擬器截圖:

 

五、後記

感受編譯時間也沒有網上說的那麼長時間啊,一邊改着編譯錯誤,一邊看着《教父》這部電影,電影尚未看明白是咋回事的就編譯完了。

在linux下運行模擬器感受速度比在windows下快的不少啊。這就是最原版的android了(aosp),感受上也是不錯的,

我以爲(aokp http://aokp.co/)的系統也很好,很喜歡他裏面的個性化設置,還有一些快捷插件也很實用。

有時間把aokp的代碼弄下來,而後移植到本身的手機上,嘎嘎!

PS: 如今手機用的就是大神作好的aokp的ROM

話說系統又讓我折騰的沒有磁盤空間了,看來系統還要從新裝啊,此次分區必定要大!

相關文章
相關標籤/搜索