系統: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
(最後爲了防止系統每次自動把make更新,在/etc/yum.conf裏再添加一行來過濾掉make的自動升級 exclude=make* gcc* java*)
gcc 的版本與推薦的版本不符合,原本想從新裝一個gcc4.4,結果弄了半天沒有成,因而放棄。
首先到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了
輸入命令:make -j4
-j4 選項是使用多個CPU核心去make(cpu有幾個核心就能夠寫幾,個人是雙核的虛擬4核)
不一會就提示錯誤,大多數錯誤均可以在此找到解答
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
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
話說系統又讓我折騰的沒有磁盤空間了,看來系統還要從新裝啊,此次分區必定要大!