在Ubuntu-14.04.3配置並成功編譯Android6_r1源碼


折騰了一周,終於把Android6_r1的源碼編譯成功。先上圖,這是在ubuntu中運行的Android模擬器:

由於我是在win8中安裝虛擬機VMware,然后在虛擬機中安裝Ubuntu進行編譯,所以遇到諸多麻煩。如果直接在linux中編譯,可能會更順利。

--------------------------------------------------------------------------------------------------------------------------

准備工作:

VMware虛擬機,安裝請參考:VMware8安裝配置Win7、CentOS-7向導

官網下載ubuntu鏡像:ubuntu-14.04.3-desktop-amd64.iso

安裝ubuntu,一並參考“VMware8安裝配置Win7、CentOS-7向導”

-----------------------------------------------------------------------------

建議:ubuntu內存分配4G,預留90G虛擬硬盤(之前選擇了默認的20G,在解壓tgz的時候直接報空間不足),網絡選擇“Bridged”方式。

為了編譯Android源碼,下面對安裝好的ubuntu作一些配置工作。

首先調出終端,用以下快捷鍵

Ctrl + Alt + T

1、安裝Git等依賴組件

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl-dev libesd0-dev

上面紅色部分是數字“1”。當然,你也可以分開執行這些安裝命令。

如果沒有這些依賴組件,可能會遇到類似這樣的錯誤:

2、安裝JDK

首先用以下命令搜索JDK版本

apt-cache search openjdk

執行安裝

sudo apt-get install openjdk-7-jdk

查看是否安裝成功

java -version

3、配置java_home

直接運行

echo $JAVA_HOME

並不能看到輸出。

設置:

echo export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/" >> ~/.bashrc

然后重啟terminal或通過使用以下命令

source ~/.bashrc

此時重新輸入$JAVA_HOME,就可以看到配置好的路徑了

4、安裝SSH Server

這個有什么用呢?利用Xshell方便我們在windows和虛擬機中操作文件。Ubuntu缺省下是沒有安裝SSH Server,Client倒是為我們裝好了。

不知道怎么用Xshell的,請猛戳:Xshell連接linux(圖文教程)

sudo apt-get install openssh-server

重啟它

sudo /etc/init.d/ssh restart

5、下載Android源碼

有人在百度雲盤上共享了Android6_r1的源碼,省去了我們-翻-牆-(博客園居然把這兩個字屏蔽了,以FQ代替,呵呵~有這么敏感么)的麻煩,請看:Android6_r1分卷源碼

原作者CSDN博客地址:Android 2.3.5源代碼 更新至android 6.0,可以下載,度娘網盤

6、拷貝Android源碼到Ubuntu

此辦法笨了點。利用Xshell其實挺快的。直接拖進來。

7、合並文件

 監測文件Hash,看是否有損壞。具體對應什么字符串請對照hash.txt

md5sum Android6_r1_aa

然后把這幾個文件合並成一個

cat Android6_r1_* > M.tgz

計算合並后的文件哈希

md5sum M.tgz

8、解壓文件

tar zxvf M.tgz

 這是個漫長的過程。

 這個解壓命令會創建mydroid文件夾,解壓的東東都在里面

9、編譯前配置

在 .bashrc文件中添加:export USE_CCACHE = 1,操作如下:

echo export USE_CCACE=1 >> ~/.bashrc

為了提高編譯效率,設置編譯器高速緩存。執行以下命令:

prebuilts/misc/linux-x86/ccache/ccache -M 30G

-M 30G 兩個參數表示設置30G大小的空間作為緩存,這個數值可以根據自己的硬盤空間大小繼續調整

接着導入編譯Android源碼所需的環境變量和其它參數,運行以下命令

source build/envsetup.sh

運行lunch命令選擇編譯目標

lunch

比如選擇1,會出現以下提示信息,告訴我們編譯的源碼的一些相關信息

10、編譯

make -j8

因為筆記本是i5 4210u,所以使用8(CPU核心的兩倍),此處可能設置過大了。

11、不斷地編譯(error不斷,無奈)

看來並不是一帆風順啊,出問題了。開始我還以為JDK版本不對,進入build/core/main.mk

發現默認就是1.7。

錯誤停止在下面的地方:

上面提過了,一開始我也沒安裝這些依賴組件,導致了一些不必要的麻煩。

還有其它常見編譯錯誤,已經有人整理出來了,適合的就參考以下吧:

1、編譯Android源碼致命錯誤解決方案

2、Build on Ubuntu 14.04 does not work

3、編譯Android系統源碼和內核源碼

 

繼續編譯

make -k

用了make -k之后,就悲劇了,編譯了一個晚上還沒好。

早上起來的時候果斷用“Ctrl + C”中斷編譯,重新安裝以上的依賴包,接着做清理工作

make clean

然后繼續開始,多加個sudo,因為之前的編譯輸出了“沒有權限操作”類似的提示。

sudo make -j8

 大約兩個小時后,硬盤利用率100%,一直沒動。編譯也似乎停住了。一個小時后,貌似掛了T~T

難道高速緩存占用太多硬盤空間?虛擬機給的空間不夠?

好吧,我重新裝一個ubuntu。然后分配60G的虛擬空間,2G內存,20G編譯高速緩存。又跑一個晚上。

第二天一看,又是error,真是淚流滿面!

arm-linux-androideabi-g++: Internal compiler error: Killed (program cc1plus)

這是什么鬼?

通過命令build-essential,g++我也裝了呀。

google了一下,有一個bug report:Build #478 Failed,可是沒看到解答。

看到stackoverflow上一個類似問答:arm-linux-androideabi-gcc: Internal error: Killed (program cc1) from Android NDK r8

整理幾個答案:

This error went away for me when I used "make" instead of the recommended "make -j4".
But rebooting the virtual machine seems to fix the problem for me. // are you sure??
For those having this issue with VMs, the solution that worked for me was bumping up the base memory. It was originally set to 512MB to 1536MB.

可是這是gcc呀。 

然后又找到這個:firefox build for Android fails,里面提到:

well the problem was caused by too little RAM allocated to my VM. Upped the RAM from 1Gb to 4Gb and the compile is now proceeding nicely. 

真是RAM小了?

再試試吧。由於機器配置原因,最多好像只能給虛擬機分配3G的內存。然后直接sudo make執行命令。

抓狂啊!!難道ARM還小了?

重裝ubuntu再來。這次分配90G硬盤空間,4G內存(開始我還以為只能給3G)。

12、編譯成功

最終使用以下編譯命令

sudo make -j2

從上午11點半左右開始執行,晚上10點回來,看到居然編譯成功了!看到system.img沒有?哈哈~

進入目錄/out/target/product/generic,可以看到ramdisk.img, system.img, userdata.img, cache.img這四個鏡像文件

13、運行Android模擬器

由於剛剛編譯成功,如果此時尚未退出終端的話,可以直接啟用命令運行Android模擬器。

emulator

如果退出了先前編譯的終端命令行窗口,那么運行模擬器就完全不一樣了。具體請參考:android4.4 源碼編譯之運行模擬器

如果對你有用,請支持一下~

 

參考:在Ubuntu上下載、編譯和安裝Android最新源代碼

        Android 2.3.5源代碼 更新至android 6.0,可以下載,度娘網盤

        android4.4源碼編譯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM