1. 程式人生 > >編譯Android原始碼和核心原始碼的歸納總結

編譯Android原始碼和核心原始碼的歸納總結

經過一個多星期的努力,終於在零基礎的情況下在ubuntu-12.04-desktop-amd64(64位Ubuntu系統)成功編譯了android-4.0.3的原始碼和Linux version 2.6.29的linux核心原始碼。期間遇到很多困難,好幾次想放棄了,不過只要堅持並找到正確的方法,最後就一定能夠成功。

注意事項:
在編譯過程中,最需要注意的就是版本問題。uabntu的版本和原始碼的版本最好能夠互相對應。這樣在開編譯過程中才能避免一些怪異的錯誤。ubantu和Android原始碼都是不斷更新的,我敢說開發人員肯定是在一定的系統上開發的。假設現在推出了一套新的Android6.0版本是在ubantu16.04上開發的。那麼在16.04上肯定能完美執行,因為這是開發人員經過不斷的修復更新的結果。然而,這並不能保證新開發出來的Android版本能在原來的ubantu10.03,ubantu12.04上完美編譯。除非開發人員做了向前相容的工作。但是根據這一個星期來找到的錯誤來說,實際情況很肯能並非如此。所以找對版本很重要。
當然,如果你是大神,可以自己修改原始碼來應對各種erro。那就隨便哪個版本啦。你想知道什麼才是對應的版本,我不知道,得問開發原始碼的人,我是試過多個版本,發現路路不通,最後根據前輩寫的部落格和自己的聰明才智(嘻嘻)才最終成功的。

這邊給出這個部落格的地址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637/
這個部落格的博主因為一個問題沒能成功在模擬器上使用2.6.29的核心執行4.0.3的android原始碼編譯出來的Android系統,但成功編譯了4.0.3的android原始碼。最後他換成了2.3.7的android原始碼。成功運行了。

編譯原始碼的目的:過程很重要,TODO

分兩部分來進行,編譯Android原始碼和編譯核心原始碼,廢話不多說開始準備:

安裝ubantu系統:
不是ubantu系統的話可以使用虛擬機器。下載地址:http://pan.baidu.com/s/1gfHb9Ph


注意事項,因為原始碼的檔案都比較大,在分配磁碟大小時建議在60G以上,最好能分配2G或3G記憶體。
ubantu12.04映象檔案。下載地址:http://pan.baidu.com/s/1bpDfWKn
編譯Android原始碼:

JDK有了,原始碼也有了。下面就開始編譯Android原始碼了。
但是在編譯原始碼之前,要先更新一下ubantu上的軟體:sudo apt-get update
如果更新失敗,那一定是更新源的問題,所謂更新源就是更新來源。切換更新源。切換方法參考這個文件:http://pan.baidu.com/s/1jIdFPQ2 這裡面有關於如何更新軟體的問題。
另外還要安裝很多軟體才能正常編譯,具體要安裝的軟體參考這個部落格:

http://jileniao.net/linux-android-building.html

開始編譯:分別執行
①source build/envsetup.sh
②lunch
此時要選擇一個編譯平臺
③make -jn
這裡的n注意取值,網上一般說法是CPU核數的兩倍,還有一說是CPU核數加1。到底哪個更準確我也沒有驗證。
但要值得提醒的是,雖然n用一個大的值會使編譯速度加快,但如果n取值過大,編譯是會報錯的。

編譯時間會比較長,而且也會出很多錯,多看出錯的log多思考。

編譯核心原始碼。
這個比起上面的內容步驟上會相對簡單一點,關鍵是找著好的部落格,方法對了。
核心原始碼下載地址:http://pan.baidu.com/s/1mi4Gv0k
參考部落格地址:http://blog.csdn.net/flydream0/article/details/7070392
需要注意的地方就是在配置環境變數的時候一定要注意路徑是否正確。另外,在配置環境變數的時候要使用root使用者。在編寫完環境變數後一定要用命令:source ~/.bashrc 或 重啟電腦,來使配置的變數生效。

最後給出倆張我成功編譯的Android系統執行在模擬器上的效果圖:這裡寫圖片描述這裡寫圖片描述

看設定裡面的Android版本和核心版本,已經換成我下載的版本了。

直接執行 emulator 提示 emulator: WARNING: system partition size adjusted to match image file (166 MB > 66 MB)
所需空間不足
影響:沒什麼影響,就是執行的慢一點。
解決方法:
emulator 加入引數 -partition-size 1024 (大於系統所要求的尺寸)即可,例如 emulator -partition-size 1024