2021-05-12 14:32:11
在Ubuntu Server 14.04上編譯Android 6.0原始碼
此前編譯過Android4.4的原始碼,但是現在Android都到了7.0的版本,不禁讓我感嘆Google的步伐真心難跟上,趁這週週末時間比較充裕,於是在過去的24小時裡,毅然花了9個小時編譯了一把Android6.0的原始碼,但是昨天編譯完之後已經很晚了,沒來得及記錄編譯的步驟,今天才慢悠悠地來記錄一下我在Ubuntu Server 14.04上編譯Android6.0原始碼的步驟。好了,廢話不多說,我們開始吧!
步驟一:
安裝Ubuntu系統。我們既可以通過虛擬機器的方式安裝Ubuntu,也可以直接在電腦上安裝,為了獲得更好的Linux操作體驗,我建議直接在電腦上面安裝Ubuntu,我在自己電腦上安裝了win10和Ubunut Server14.04雙系統,使用的時候可以根據自己的需要隨時切換系統,非常方便。關於如何搭建雙系統,網上有很多教學,我就不在此敘述了,但是我想說明的一點是在安裝Ununtu的時候,分配給Ubuntu的磁碟空間一定要盡可能大一點,至少60G,我分配了105G,編譯完成之後還剩下50多G,也就是說差不多用了近50G的空間,所以安裝Ubuntu的時候一定得分配大一點的磁碟空間,不然編譯會因為空間不足而中斷。
步驟二:
搭建好Ubuntu系統之後,我們需要下載一份Android6.0的原始碼,網上很多文章都介紹了如何通過repo的方式來下載原始碼,但是通過這種方式下載速度可能並不是很理想,直接下載百度雲的Android6.0原始碼,下載地址:http://www.linuxidc.com/Linux/2016-01/127285.htm。
因為Android6.0的原始碼所佔空間非常大,所以上傳者把Android原始碼分成了很多個檔案,待全部下載完畢之後,我們可以通過命令把這些分開的檔案合併為一個檔案。
步驟三:
如果我們是在Windows上下載的原始碼,那麼當我們開啟Ubuntu之後,要做的第一件事請就是把Windows中的Android原始碼拷貝到Ubuntu系統下面,我直接利用複製貼上的方式將原始碼拷貝到了Ubuntu的Home目錄下面,拷貝之後的目錄結構Home/android6_r1/各個分開的原始碼檔案。
步驟四:
合併這些被分開的原始碼檔案。我們按下鍵盤上的ctrl + alt + T開啟控制台,通過cd命令進入到Home/android6_r1/目錄下面,然後執行命令:cat Android6_r1_* > M.tgz,不用多久,在Home/android6_r1/目錄下面就會生成一個新的檔案——M.tgz,M.tgz就是合併之後的壓縮檔案。
步驟五:
解壓步驟四生成的壓縮檔案。同樣是在Home/android6_r1/目錄下面,我們在控制台執行命令:tar zxvf M.tgz,開始解壓。解壓的過程大概需要20分鐘左右的時間,請耐心等待。解壓好了之後,在Home/android6_r1/會生成一個mydroid的資料夾,這個資料夾就是Android原始碼的根資料夾了,裡面有abi、devices、hardware、packages、sdk、art等資料夾和檔案。
步驟六:
安裝編譯原始碼所需要的軟體。在控制台中我們通過cd..命令退回到Unbuntu使用者的根目錄下,然後依次執行以下命令:
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
以上命令每一條都必須分開單獨執行,目的是為了獲取1.7版本的jdk並設定環境變數。當我們安裝完Ubuntu之後可能會自帶一個jdk,但是如果用自帶的jdk編譯Android原始碼很可能會提示jdk版本不符合要求的錯誤,因此我們需要重新下載1.7版本的jdk,我用openjdk-7-jdk編譯未出現任何問題。
接下來繼續執行以下命令,同樣每一行都是分開單獨執行的:
sudo apt-get install git gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386
sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
以上命令主要是安裝編譯原始碼時需要用到的各種軟體,如果沒有安裝這些軟體,編譯的過程中會提示缺少必要的軟體而無法繼續編譯,因此,在正式編譯原始碼之前,一定要先安裝這些軟體。
步驟七:
開始編譯。在控制台中通過cd命令進入到Home/android6_r1/mydroid/目錄下,然後執行命令:source build/envsetup.sh,匯入編譯Android原始碼所需的環境變數和其它引數。
步驟八:
在控制台中執行命令:lunch,執行命令之後會提示我們選擇編譯目標。這裡我選擇的的預設目標,即aosp_arm_eng。
步驟九:
在控制台中執行命令:make -j8,開始編譯。注意,make -j8命令中的數位8和我們電腦的CPU核心數以及執行緒數有關係,一般這個數位的數值最大不能超過CPU執行緒數的2倍,例如我電腦的處理器是i5 6200U,為雙核四執行緒,因此編譯Android原始碼的時候,我可以設定的最大工作執行緒數量為4 * 2 = 8。在執行make命令的時候我們應該根據自己的CPU引數設定合理的工作執行緒數值。
以上步驟執行完之後,就是一段非常漫長的等待了,我從中午十二點多開始編譯,一直到晚上九點多編譯完成,整個編譯過程耗時九個多小時,幸好我的運氣還不錯,編譯過程中沒有出現任何錯誤,只是中途意外中斷了一次,但是Android原始碼是可以接著上次中斷的位置繼續編譯的,已經編譯的部分不會重複編譯,因此並未對我造成大的影響。同志們,我想說的是,編譯的過程中一定要有耐心喲!
整個原始碼編譯完成之後,如果提示如下資訊,那麼Congratulations, you are successful!!!
此時,你可以直接執行命令:emulator,執行之後將會出現android模擬器的介面,如圖:
OK,至此Android6.0原始碼的編譯就大功告成了,接下來我們就可以隨心所欲地閱讀和修改原始碼內容,客製化自己心目中的Android系統了!
相關文章