Android源碼編譯--編譯過程

6.0源碼下載

下載方式有很多,出的去可以直接去Google Source下載,或者別人共享資源(有些會出現解壓報錯),或者鏡像站AOSP下載

前提條件:Ubuntu14.04環境
AOSP鏡像下載:

1.下載repo文件,自行下載
2.修改repo文件中REPO_URL

google的地址   
REPO_URL = 'https://gerrit.googlesource.com/git-repo'   
改爲清華大學的地址   
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

3.將改好repo文件拷貝到"/usr/bin/"文件夾下,並賦予“可讀可寫可執行”權限,

chmod a+x repo

可省去以下配置變量步驟

mkdir ~/bin
PATH=~/bin:$PATH

4.創建代碼目錄(Linux文件目錄區分大小寫)

mkdir /Documents/android_source 
cd /Documents/android_source

5.初始化倉庫

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r72
#-b 後面的參數爲分支的名稱,每個版本的分支名稱可以在android官網列表中查看https://android.googlesource.com/platform/build/

下載完成後,當前目錄下會出現.repo目錄的隱藏文件夾,進入子目錄中可看到manifest文件包含各個分支的版本號說明,代碼都是根據它從checkout出來的,這個文件夾特別大,我下載完成後查詢內存大小爲70G,

6.同步源碼樹(以後只需執行這條命令來同步)

repo sync
# 支持(-j4) 表示併發數爲4,清華鏡像只支持最大併發數4

剩下的就是等待下載完成了,android-6.0.1_r72的源碼內存大小在30G。如果沒有刪除.repo文件夾,以後只需每次運行“repo sync”即可保持同步。

另一種源碼下載方式:
分卷下載,md5sum校驗文件是否損壞,cat合併成.tgz文件,解壓

OpenJdk7安裝

sudo apt-get update  
sudo apt-get install openjdk-7-jdk  
sudo update-alternatives --config java  
sudo update-alternatives --config javac

編譯所需的包,預安裝

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

開始編譯,進入到源碼所在的目錄,命令如下

source build/envsetup.sh

lunch        ##運行命令之後會提示選擇編譯目標,我選擇默認目標,即aosp_arm_eng
make        ##(也可以使用 make -j4 四線程編譯)

注:我使用的是make,沒有加-jx ,主要是用的虛擬機,沒有分配太多CPU資源,中間出現過虛擬機無響應,強制關機之後,出現無法打開Ubuntu圖形界面,而是進入了tty命令模式,痛苦的不行。

以下是編譯過程出現的異常彙總:

解決:Android M引入了Jack (Java Android Compiler Kit),在編譯時會啓動jack server,優化編譯速度等。
如果遇到jack編譯錯誤,可以把$HOME/.jack中的配置文件中的SERVER=true設成false,不用jack,jack現在還不穩定。此外,M對應的是OpenJDK7。

還有一個關於Java VM內存不夠的問題,沒有保存到截圖,沒做任何處理,重新make就好了。

OpenJDK Client VM - Cannot allocate memory

另一種解決方案:

中間等待的時間有點長,花費時間跟虛擬機的配置有關,我畫了4個小時左右。

生成system.img所在目錄:/out/target/product/generic/system.img

編譯完成後,可以運行模擬器了,如果我們上圖的命令界面還在,可以直接輸入命令

emulator

或者當前界面關了,可以運行如下這些命令

$ source build/envsetup.sh
$ lunch 
$ emulator

我的因爲是tty命令模式界面,emulator啓動失敗了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章