Windows下通過虛擬機搭建android的linux編譯環境

一.概述。

此文講述在windows操作系統下,在虛擬機軟件上安裝linux操作系統,配置此虛擬機上的linux操作系統來編譯android系統源碼。操作系統用Windows XP Windows 7都可以,虛擬機我用的VMware9.0正式版,linux系統用的Ubuntu12.0464位版本。

 

二.下載及安裝VMware9.0正式版。

隨便在網上搜索一個VMware9.0的下載站,例如http://www.crsky.com/soft/1863.html(非凡軟件站),由於是官方正式版,安裝時需要序列號,可以網上搜索一個序列號用就可以了。

軟件下載完畢後,不要急着安裝,先確認下CPU是否支持64位(由於安裝的是Ubuntu64位版本,必須CPU支持64位)。可以在網上找一個查看CPU信息的軟件,如CPU-Z這個軟件(下載地址例如:http://www.onlinedown.net/softdown/2775_2.htm,華軍軟件園),下載安裝好CPU-Z這個軟件後打開程序,在處理器頁中的指令集一欄中看有沒有64相關的數字,如EM64T,如果有的話說明CPU是支持64位的,那直接安裝VMware就可以了。如果不支持64位,那繼續看看指令集中有沒有VT-x這一項,如果沒有,那就只能換電腦了,如果有的話,說明還可以用虛擬技術來實現64位,虛擬需要進入電腦的BIOS設置中的處理器設置,把處理器虛擬技術打開,例如我電腦BIOS設置中有一項“Intel虛擬技術”,把這項設置爲開啓,然後重啓電腦就可以裝VMware了(如果之前已經安裝過VMware,那必須卸載,設置了CPU虛擬技術後再重新安裝)。

 

三.下載及安裝Ubuntu12.0464位版。

由於目前多數android源碼的新版本都只支持64linux環境下編譯,所以這裏選擇下載64位的Ubuntu12.04Ubuntu的一個長期支持版本,android的編譯在此版本上也經過測試,所以推薦下載Ubuntu12.0464位版本,官網的下載地址爲http://www.ubuntu.com/download/desktop

下載好後,就可以打開VMware來開始準備安裝Ubuntu了。在VMware中選擇創建新的虛擬機,然後按照提示,選擇鏡像文件爲剛剛下載好的Ubuntu12.04,其他選項一般按默認配置點擊下一步就行了。在其中配置虛擬機的那一項可以做些修改,例如內存我改爲了1536MB1.5GB,處理器選擇2核,硬盤爲120GB。最後等待安裝就可以了,時間可能有點長,可能一小時左右吧。

安裝好Ubuntu後,還可以安裝VMware Tools,用於方便在虛擬機上的Ubuntu系統和本機Windows系統間直接進行文件傳輸及複製粘貼等操作,文件傳輸時就好像系統的兩個文件夾間傳遞文件一樣,可以直接用鼠標拖拽文件,非常方便。安裝方式爲,在VMware中右鍵單擊My Computer列表中的Ubuntu系統,選中最後一項Install VMware Tools,然後會先自動下載VMware Tools.iso文件,下載好的文件爲在VMware的安裝目錄下的linux.iso這個,如果下載好後不能自動安裝VMware Tools,則可以先關閉虛擬機上的Ubuntu系統,然後在VMware中對Ubuntu系統硬件配置做個修改,在其中的CD/DVD(IDE)選項中,將connection下選爲Use ISO image file,並且選擇剛剛下載好的linux.iso文件,然後確認保存,重新打開Ubuntu系統,Ubuntu系統啓動好應該就能自動安裝成功VMware Tools的。

   

四.Android主要編譯工具安裝。

這裏安裝的內容在android open source官網中有介紹(官網地址爲:http://source.android.com/source/initializing.html),其中有關於Ubuntu12.04版本需要安裝的內容,主要有兩步:

1.打開Ubuntu系統的命令行終端,輸入以下內容:

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

回車確認後輸入Ubuntu系統的密碼及按照提示輸入“y”之類的確認就行,如果網絡沒問題的話一般等一段時間就可以安裝完了,最後可能會有個錯誤提示,內容有讓你嘗試“sudo apt-get –f install”之類的,如果遇到這個情況,那麼直接在終端中輸入“sudo apt-get -f install”後回車就行了。

2.上一步安裝完成後,在終端中輸入以下命令:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

 

五.安裝javajdk 2.6版本。

1.下載:目前android的源碼編譯需要用到java的官方jdk2.6版本,否則會出現編譯錯誤,編譯無法成功。首先下載jdk2.6版本的.bin安裝文件,下載地址爲http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u34-oth-JPR,選擇其中的jdk-6u34-linux-x64.bin(即jdk2.6.3464linux版)下載。(下載時候還需要oracle的賬號,按照提示註冊一個oracle賬號後登錄就可以下載jdk了)

2.配置:上一步中下載好的jdk文件一般是在Ubuntu系統的主文件夾下的“下載”或“Download”文件夾中,確認下載完成後,在終端中依次輸入以下命令:

cd /usr/lib/jvm

sudo cp /home/carter/下載/ jdk-6u34-linux-x64.bin /usr/lib/jvm(命令的前部分即爲上一步中下載好的jdk文件所在目錄,每個人電腦主機名都不一樣,所以這裏的路徑要對應改爲自己的,不能直接拷貝這裏的“/home/carter/下載”)

sudo chmod a+x jdk-6u34-linux-x64.bin

sudo ./ jdk-6u34-linux-x64.bin

sudo mv jdk1.6.0_34/ java-1.6.0_34-sun/

sudo ln -s java-1.6.0_34-sun java-6-sun

sudo rm jdk-6u34-linux-x64.bin

然後輸入sudo gedit /etc/environment,會打開一個文本文件,將其內容修改爲:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/java-6-sun/bin"

JAVA_HOME="/usr/lib/jvm/java-6-sun"

CLASSPATH="/usr/lib/jvm/java-6-sun/lib"

保存文件並關閉,接着輸入以下命令:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-6-sun/bin/java 300

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/java/java-6-sun/bin/javac 300

sudo update-alternatives --config java

之後會在終端中顯示一些內容,按照提示選擇其中第2項,即輸入數字2然後回車就可以了。接着可以在終端輸入java –version來查看下剛剛配置的java信息。

   

六.將gccg++的版本由4.6改爲4.4

在第四步中安裝命令執行後默認安裝的是gccg++4.6版本,但目前android的編譯用4.6版本太高了,只能用4.4版本。首先下載安裝gccg++4.4版本:

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4

安裝完成後輸入:

cd /usr/bin

ls –l gcc*

內容顯示爲:

   lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6

        -rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4

        -rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6

從內容中可看出gcc命令鏈接到的是gcc-4.6版本,需要修改:

sudo mv gcc gcc.bak

sudo ln –s gcc-4.4 gcc

同樣g++的版本也要改爲4.4版本:

sudo mv g++ g++.bak

sudo ln –s g++-4.4 g++

最後再安裝下g++-4.4-multilib

        sudo apt-get install g++-4.4-multilib

 

七.下載android系統源代碼。

1.安裝Repo

        mkdir ~/bin

        PATH=~/bin:$PATH

        curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

        chmod a+x ~/bin/repo

2.下載代碼:

在文件系統主文件夾下建一個文件夾來存儲源代碼,例如我建了一個work文件夾,然後在下面建一個4.0.3的文件夾用來準備下載android4.0.3的源碼。之後在命令行終端中cd跳轉到此文件夾路徑下,然後分別輸入以下兩個命令:

repo init -u https:// android.googlesource.com/platform/manifest -b android-4.0.3_r1(這裏我是準備下4.0.3版本的源碼,所以-b後面跟着的是android-4.0.3_r1,如果需要下別的版本,將-b後面的內容換爲對應版本名就可以了,或者不加-b及後面的參數,那就默認下載master的分支,master分支代表google發佈的android的最新版本)

repo sync

以上兩條命令中,前一個爲初始化要下載的代碼路徑,後一個爲真正執行下載的命令,在執行repo sync命令下載源碼時,如果出現網絡中斷或者其他原因導致命令行終端卡住了或者一直沒下載到代碼(可通過360安全衛士看是否有網絡流量來判定),那就在終端中輸入ctrl+Z來取消,取消後再重新輸入repo sync會接着繼續之前的下載的,整個工程源碼比較大,5G左右吧,下載時間比較長,可能要一整晚,最後如果提示syncing work tree done之類應該就說明源碼下載完成了。

 

八.編譯android系統源碼。

   1.swap分區調整:

第一次剛剛下好android系統源碼時,要先全編譯一次,否則無法執行其他編譯單個app等命令,編譯前最好先配置下swap分區,否則有可能會編譯不通過。在終端中輸入命令free -m,會顯示swap分區的信息,如Swap1533 0  1533之類的,可以看出我這裏的swap分區大小是1533M,我第一次編譯時候可能由於swap分區太小編譯沒有通過,後來我就把swap分區增加了1G,就編譯通過了,增加分區方式如下:

        首先在主文件夾下建一個swap文件夾,然後在命令行終端中cd到此文件夾下,執行命令sudo dd if=/dev/zero of=swapfile bs=1024 count=1000000bs單位爲字節,count爲數目,即分配一個1024*1000000B=1GBswapfile文件)。接着執行命令sudo mkswap swapfile,最後執行sudo swapon swapfile。然後查看輸入free –m重新查看swap信息,已經變爲,Swap2510 0  2510了,說明我的swap分區增加了大概1G,即增加swap分區成功。不過sudo swapon swapfile這個命令只是臨時的增加swap分區,如果Ubuntu系統重啓後,就會失效了,這時候free -m查看會發現swap又變回了1533,這個時候就要重新cdswap文件夾下,重新執行下sudo swapon swapfile這個命令。如果嫌麻煩,不想每次重新啓動系統後都要重新增加下swap分區,可以通過把swap文件寫入/etc/fstab文件中來保存效果。我個人只是全編譯一次系統源碼,之後只編譯部分的app,所以我只在第一次全編譯系統時候增加了swap分區,後面就沒管過了,編譯app等小模塊時候不增加swap分區也是可以通過的,所以就沒研究怎麼把swap文件一直保持。

   2.全編譯整個android系統源碼:

        以上各步驟都完成後,在命令行終端中cd到下載好的android4.0.3源碼文件夾下,執行命令source build/envsetup.sh,接着執行lunch full-eng,最後執行make

        整個編譯過程有點長,可能4小時左右吧,具體看電腦配置情況了。這裏我的編譯命令用的是make,而不是make –j4之類的,在網上找的文章中,有的人說直接用make命令編譯會好些,用make –j4可能編譯不通過,而我第一次編譯時沒有增加swap分區,編譯命令用的make –j4,最後編譯沒成功,不確定是因爲沒有增加swap分區還是這裏用的命令不對,所以我兩個都改了,增加了swap分區,這裏命令也改爲直接用make。整個系統源碼編譯成功,以後就可以用mmm命令來單獨編譯某個app了,如果以後在編譯單個app時提示mmm命令無法找到之類的,那就先執行下source build/envsetup.sh,再用mmm編譯就會成功了。我在編譯android4.0.1整個源碼時候是可以成功的,但後來編譯4.0.3的源碼時有遇到個錯誤,不知道是官方的4.0.3的代碼有問題還是我有些地方沒配置好,最後在網上搜索了下別人提供的解決方案。如果大家在編譯4.0.3的源碼時遇到有報cts/apps/CtsVerifier……T extends android.app.Activity相關錯誤的,可以按照這個方法來解決:修改源碼根目錄下的cts文件夾下的Android.mk文件,將文件中的兩行命令都用#註釋掉,修改好後重新執行make命令應該就能通過編譯的。make命令在編譯過程中如果報錯,改正錯誤代碼後重新執行make命令是可以接着編譯的,不用擔心又會重新編譯整個源碼。
發佈了20 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章