1. 程式人生 > >在ubuntu16.04上編譯android6.0原始碼

在ubuntu16.04上編譯android6.0原始碼

最近想自己編譯一下android原始碼,上網查了不少資料,有很多都在說自己去谷歌下載原始碼,安裝git,repo什麼的,還有的文章說可以在windows下編譯,安裝個虛擬機器就可以了,不過本人電腦配置有點低,在虛擬機器跑的話可能會崩,所以,考慮再三,還是自己裝一個ubuntu系統了;

我的電腦加了塊250G的固態,所以,我分了100G的空間給了win10,剩下的全給了ubuntu,至於怎麼安裝雙系統,網上一搜一大批,一個個看就好了,我是用了一下午去準備環境的,其實只要網速快的話,裝系統是件很簡單的事;

在安裝好ubuntu之後,接下來就是對ubuntu的環境去進行設定了,之前沒有接觸過Linux系統,所以配置起來會有點慢,無非就是在網上搜教程了,搜各種命令而已;這裡記錄一下重點:

(1)配置java8環境:

         sudo add-apt-repository ppa:webupd8team/java

         sudo apt-get update

         sudo apt-get install oracle-java8-installer

這裡有個問題,因為要編譯的android 6.0原始碼是使用openjdk1.7的,所以只java8是編譯不了的,我是因為一直用的jdk8,所以需要裝一個jdk8方便,如果不需要,直接裝openjdk1.7就可以了,這裡也貼出配置openjdk的命令:

         sudo add-apt-repository ppa:openjdk-r/ppa

         sudo apt-get update

         sudo apt-get install openjdk-7-jdk

以及下面的關於jdk8和7之間切換的命令:

          $ sudo update-alternatives –config java

          $ sudo update-alternatives –config javac

          $ sudo update-alternatives –config javah

          $ sudo update-alternatives –config jar

(2)下載android6.0原始碼,這裡貼出一個百度雲下載地址:

android 6.0原始碼下載

(3)通過這個方式下載會快很多,下載到的原始碼從a-j一共分10個檔案,還有一個記錄各檔案的hash值,這位原始碼大佬很貼心,生怕下載錯了或者漏下了,所以把各檔案的hash值記錄下來,可以通過md5sum 檔名命令去對比hash值是否相同,不相同的話需要重新下載,接下來通過cat Android6_r1_*>Android6_r1.tgz將下載好的檔案壓縮成一個tgz包,以防萬一,使用md5sum Android6_r1.tgz再次進行對比,畢竟如果原始碼下錯一點也不好玩;

(4)通過tar -zxvf Android6_r1.tgz解壓原始碼,這個過程不是很慢,等一會就會好;

(5)安裝各種依賴:

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 
sudo lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache

為保證可以正確的編譯下去,一定要保證上面的依賴都已經安裝了!!!

(6)準備工作完成後,就可以開始進行編譯

echo export USE_CCACHE=1 >> ~/.bashrc

prebuilts/misc/linux-x86/ccache/ccache -M 50G    這一句是設定快取記憶體為50G,這樣編譯會快一點;

source build/envsetup.sh    匯入編譯Android原始碼所需的環境變數和其它引數

lunch    選定編譯目標,直接選1就好了

make -j8 開8個執行緒進行編譯

(7)接下來就是漫長的等待了。。。建議睡一覺

在編譯的過程中,如果一次就編譯成功的話,那麼可以說是非常順利了,我在編譯過程中遇到很多坑,導致我足足編譯了三天才成功,網上也搜了很多教程,期間遇到空間不足的問題,已經編譯了四個小時了,但是提示我空間不足,最後心裡就有那種想死的衝動,沒辦法,我之前預留了50多G的空間,但是最後還是不行,我是在ubuntu16.04裡編譯的,但是我使用的編譯盤就是在windows盤裡,起初只是抱著試一試的態度,發現其實可以,所以直接搬到win10盤裡去跑了。

最後的最後,一句忠言,如果系統裡存在jdk多個版本,那麼最好就保留一個openjdk7,我是在第二天的編譯到4個半小時的時候才發現java8其實是jdk版本導的鬼,我已經按照網上教程把jdk版本切換了,不知道為什麼還是不行,所以,我索性把jdk8解除安裝了,只保留一個j7,最後終於成功。

當你看到這個介面的時候,那麼就恭喜你,終於成功了,我當時看見了心裡賊激動呢!!!