天天看點

Android源碼的編譯(4.4.2)

    今天主要為大家叙說下Android源碼的編譯,其實一開始說起Andriod源碼的編譯,我的心裡就沒底,有一種很懼怕的感覺,因為,我就想,那麼龐大的一個系統,如果出了問題,我該怎麼解決呢,還好,度娘和google哥哥給我提供了不少幫助(這其實得益于先驅們的貢獻),是以這個過程中,他們為我解決了不少問題的,下面我們開始來編譯源碼。

   首先你要知道,編譯Android源碼不是HelloWorld,出現再多的錯誤,你要泰然處之,倒是不出現錯誤,你才覺得奇怪,你想想,你現在所用的系統,windows   or   mac   or   linux  ,那麼你編譯android源碼會遇到什麼問題呢?第一,你所用的平台就是個問題,如果用windows的使用者,那麼你就需要裝個linux虛拟機,你可以選擇VMWARE來安裝linux或者直接再windows上裝CYGWIN,這樣就能模拟linux下的操作;而如果你用的是linux或者mac系統,那麼先恭喜你,android的官網上提供了這兩種系統的的編譯方式,你可以根據步驟來即可。

   我這裡用的是ubuntu系統,一開始也是再mac系統上編譯的,可是遇到不少問題,而且聽網上的介紹,一般都是建議再ubuntu下編譯,是以也就沒再去管mac下編譯的出錯問題,還望有在mac上編譯成功的大牛們給點建議或給個教程,萬分感謝!好了,廢話不多說了,現在開始。

   我分别在兩種情況下進行了編譯,一個是ubuntu10.04 64位的虛拟機上,我的ubuntu是裝載VMWARE上的,另一個是在主機上裝的ubuntu12.04 64位,其實兩種沒多大差别,所

以這裡就一起來叙說了。

   編譯源碼,你要有一個堅實可靠的環境,首先你先得檢查你得硬碟,你得記憶體是否符合需求,系統最好是64位,雖說android源碼中得其中有些比較早得版本是可以在32位上編譯得(沒有證明,是聽網上一些意見說得),但是我非常建議大家用64位機器,這樣能避免不少錯誤;其次,你要在真機上裝64位系統,你要保證4G記憶體;在虛拟機上,我得10.04ubuntu是2G記憶體,但不要是1G,不然會出現錯誤,你可能很難找出錯誤得原因;最後,硬碟的空間得足夠,android得各個版本的源碼的大小是不同的,我這裡的android4.4.2的源碼是9.2G,然後編譯好了,一共是34.5G的檔案(包括源碼),是以你至少要保證有40G的額外空間吧(這裡是針對我的4.4.2的編譯,當然,如果是早起版本的話,就不需要那麼大,不過反過來說,那麼大肯定不會報空間不足的錯誤),如果條件允許的話,你最好再大點(現在的硬碟一般都能滿足要求,當然,在你準備編譯之前,該騰的空間肯定已經是騰出來了的);如果有人說,我實在不夠,電腦上已經放滿了Objects,那麼這時候還有一種辦法,就是拿一個足夠空間的移動硬碟來,編譯的時候把生成的檔案寫在你的移動硬碟裡,甚至你可以把你的源碼一起放在移動硬碟,然後編譯的時候,也是在你的移動硬碟上編譯,我就是這麼做的,但是這樣的話編譯速度就取決于你的的硬碟讀寫速度了,與成功率當然還是無關的,反正你一直讓你的機器去Run就行了。

    (上述說到的如果在源碼在移動硬碟中,你也想在移動硬碟上編譯,那麼你把你的硬碟連接配接上電腦後,就需要把你的硬碟挂載到本地,為什麼要挂載呢?有人會問,不是直接在硬碟中讀寫嗎?那為什麼還要挂載?下面的過程中我會解釋這個問題,請大家先忍耐下。。。)

     好了,硬體的問題解決了,接下來就剩下軟體問題了,在make之前,你需要完成下面的操作:

     1. 将android源碼中下的所有檔案,檔案夾都加上可執行的權限,因為在編譯過程中,你會遇到Permission Denied的錯誤,這是因為有些可執行檔案在運作過程中需要可執行的權限,可是,我怎麼知道哪些檔案需要什麼權限呢,幹脆一不做,二不休,我就把android源碼目錄下的所有檔案都加上可執行的權限,那麼後續就滿血複活啦,隻要敲擊以下指令即可:

      sudo chmod -R 777 *

    2. 上面的1問題中所說的相信大家能了解,可是這裡,用移動硬碟編譯的朋友們可能會遇到一個問題:明明執行了上面的指令,卻為什麼沒有反應呢,ls -l  查詢了下,以前怎麼樣,現在還是怎麼樣,經過查證,原來是你無法修改移動硬碟的可讀可寫可執行的權限,更細節的原因本人也不知道,那麼這時候我就選擇挂載,把盤中的内容挂載到本地,這樣,相當于在本地對移動硬碟的源碼做了一個映射,就像指針一樣,我修改本地就如同修改移動硬碟中的東西一樣,然後再執行上述指令,就成功了,到這裡,大家應該明白了,我為什麼要挂載了吧!

   怎麼挂載呢?在你的目錄的一個可用的位置建立一共目錄,比如:mkdir  android

   然後,df  -h  查詢你的磁盤的目錄,我的磁盤是/dev/sda1

   最後,敲入指令:mount -o umask=0000 /dev/sda1  /home/pro/android就可以了,下面你通路android就等于是在通路你的移動硬碟了

    3. 好了,終于步入正規了,下面就可以按官網所說的來一步步做吧,

Android源碼的編譯(4.4.2)

      這裡是要裝JAVA運作環境,但是不能根據他的來,因為他的這個安裝jdk7的是對應最新的android源碼分支的(android源碼5.0版本),我們這裡編譯的是android4.4.2,是以用的jdk6,如果你不裝java運作環境,編譯的時候也會報錯,你可能這時候會把openjdk-7-jdk改稱openjdk-6-jdk,但是我這麼做後又遇到了問題,提示說不能用openJDK,需要用oracle官方的jdk6,是以隻好去老老實實地去oralce官網下載下傳jdk6了,果然,那樣就對了(這裡,我不知道這個錯大家會不會跟我一樣發生,如果有人沒有這個錯,那麼就繼續編譯吧,沒什麼問題地);

     其實,這裡配置Java的時候會有一點小的問題,如果現在不注意這個問題,那麼到後面編譯的時候一直會出現莫名其妙的錯誤的。

     假如你一開始安裝的不是Java1.6,那麼這時候你系統預設就不會去找java1.6的東西,即使你把配置好了java1.6的環境變量,是以你要通過以下的方式來配置:

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_45/bin/java 1

$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_45/bin/javac 1

$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_45/bin/javaws 1

$ sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_45/bin/jar 1

$ sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.6.0_45/bin/javadoc 1

$ sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.6.0_45/bin/javap 1  (EDIT - This is needed to compile Kit Kat 4.4)

配置好後再來選擇所要用的java1.6的環境:

$ sudo update-alternatives --config java

$ sudo update-alternatives --config javac

$ sudo update-alternatives --config javaws

$ sudo update-alternatives --config jar

$ sudo update-alternatives --config javadoc

$ sudo update-alternatives --config javap  (EDIT - This is needed to compile Kit Kat 4.4)

到此為止,java環境算是安裝好了

     4. 安裝好JAVA環境後,就需要裝一些相應地包,如下圖所示,

Android源碼的編譯(4.4.2)
Android源碼的編譯(4.4.2)

5.好了,環境地初始化都完成了,下面就正式編譯源碼,

Android源碼的編譯(4.4.2)
Android源碼的編譯(4.4.2)
Android源碼的編譯(4.4.2)

到這裡,剩下地就需要神地等待,過程中不保證會沒一點錯誤,有的話你就趕緊度娘 or google了

如果成功了,最後一步 ,你就可以光榮地啟動你的模拟器了,怎麼啟動,網上的說法各一,一查便是,這裡就不說了!!!

以上是小弟實踐的整個過程,求各位大哥,大牛多多提意見,多多批評~