【Android】AOSP源碼下載及編譯 for mac

本文記錄了AOSP在Mac系統(tǒng)上下載和編譯的過(guò)程。

采用的系統(tǒng)是 macOS?10.13.1

所使用的AOSP分支是 android-8.1.0_r7

系統(tǒng)預(yù)留空間 大于200G

一. 環(huán)境配置

? ? 環(huán)境配置,官網(wǎng)給出了非常全的教程:Build Environment

????對(duì)于Mac用戶(hù)來(lái)說(shuō),需要配置的相對(duì)也不會(huì)很多

? ? 1. 創(chuàng)建大小寫(xiě)敏感文件系統(tǒng)

? ? ? ?????AOSP源碼編譯需要一個(gè)大小寫(xiě)敏感的文件系統(tǒng)環(huán)境,所以我們自己需要?jiǎng)?chuàng)建一個(gè)。打開(kāi)Terminal,輸入

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 150g ~/android.dmg

? ? ? ? 上面的150g就是我們創(chuàng)建的文件系統(tǒng)的可用大小,android.dmg就是我們創(chuàng)建的文件系統(tǒng)鏡像,其存放的目錄可以在任何地方,這里我們暫時(shí)制定在用戶(hù)根目錄下。之后找到該文件雙擊后,就可以將其掛載到系統(tǒng)文件系統(tǒng)中。我們可以在Finder左側(cè)看到新掛載的文件系統(tǒng)。

? ? 另外對(duì)于創(chuàng)建好的鏡像文件,我們也可以重新分配其大小

hdiutil resize -size <newsize>g ~/android.dmg


? ? 2.安裝JDK

對(duì)于Mac用戶(hù)來(lái)說(shuō)我們系統(tǒng)自帶了Open JDK7,不過(guò)如果編譯的是7.0以上的android系統(tǒng)的話(huà),則需要Open JDK 8 的環(huán)境,所以我們自己需要下載安裝,我們可以到官網(wǎng)選擇需要的版本進(jìn)行下載Java官網(wǎng)

下面列出Android版本與JDK的對(duì)應(yīng)關(guān)系:

Android 7.0 (Nougat) - Android 8.0 (O release): Ubuntu -?OpenJDK 8, Mac OS -?jdk 8u45 or newer

Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu -?OpenJDK 7, Mac OS -?jdk-7u71-macosx-x64.dmg

Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu -?Java JDK 6, Mac OS -?Java JDK 6

Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu -?Java JDK 5


? ? 3.安裝Repo

? ? Repo是AOSP中用于下載和管理源碼的工具,也可以將其看成是git的上層管理控制工具。我們可以通過(guò)Terminal進(jìn)行下載,

mkdir ~/bin

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/

repochmod a+x ~/bin/repo

之后我們需要將repo配置到環(huán)境變量中,打開(kāi) ~/.bash_profile,我們將以下代碼加入到文件最后一行

PATH=~/bin:$PATH

重新打開(kāi)Terminal,我們輸入repo后可以看到配置成功。


????4. 安裝XCode

? ? Xcode為AOSP提供Native編譯環(huán)境,對(duì)于Xcode的安裝我們可以直接通過(guò)App Store進(jìn)行安裝,目前Xcode版本為9.x,SDK版本為10.13,不過(guò)對(duì)于8.x版本的Android源碼來(lái)說(shuō),該版本有點(diǎn)高,我們需要在完成Xcode的安裝后再下載一個(gè)低版本的SDK,我們可以到這里去下載:MacOSX SDK下載,我們可以下載MacOSX10.12.sdk.tar.xz

下載完成之后,Terminal輸入

tar -jxvf MacOSX10.12.sdk.tar.xz

進(jìn)行解壓,可以獲得一個(gè)MacOSX10.11.sdk的目錄,之后我們通過(guò)Finder,在應(yīng)用程序中找到我們Xcode,右鍵顯示包內(nèi)容,進(jìn)入到Xcode里面,之后將我們剛解壓出來(lái)的文件放到Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs目錄下。

安裝Xcode command line tools

xcode-select --install


????5. 其他依賴(lài)庫(kù)安裝

官方推薦用MacPorts來(lái)安裝,需要從MacPorts官網(wǎng)安裝一個(gè)MacPorts,MacPorts官網(wǎng),安裝完之后將其配置到環(huán)境變量之中,也就是將export PATH=/opt/local/bin:$PATH配置到~/.bash_profile最后一行。

之后安裝?gmake libsdl git gnupg?bison,通過(guò)Terminal輸入

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg?bison

回車(chē)后即可進(jìn)行安裝,首次可能會(huì)出現(xiàn)更新的問(wèn)題,需要根據(jù)其給出的提示進(jìn)行相應(yīng)的操作。

如果出現(xiàn)Port gmake not found的錯(cuò)誤的話(huà),可以先執(zhí)行

sudo port -d sync

當(dāng)然如果用其他包管理器可以下載到?gmake libsdl git gnupg?bison 的話(huà)也是可以的。


二. AOSP源碼下載

????對(duì)于在國(guó)內(nèi)的開(kāi)發(fā)者來(lái)說(shuō),使用國(guó)內(nèi)的鏡像站下載源碼是個(gè)不錯(cuò)的選擇,我們這里推薦清華鏡像站

其為我們提供了初始化包的下載方式,一開(kāi)始我們可以不需要使用repo進(jìn)行拉取代碼,對(duì)于這個(gè)初始化包我們有兩種下載方式:

????一種是使用其官網(wǎng)提供的方法,首先打開(kāi)終端Terminal,定位到需要存放源碼的目錄,輸入

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下載初始化包

?????按回車(chē)后,就會(huì)從鏡像站下載資源包,需要注意的是,這個(gè)包大小有40多G,所以下載過(guò)程需要花費(fèi)非常漫長(zhǎng)的時(shí)間,另外不支持?jǐn)帱c(diǎn)續(xù)傳。

?????另外一種下載方式是使用第三方下載器,比如使用迅雷,直接在下載地址中輸入https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,即可進(jìn)行下載。

?????這里推薦使用第二種方式,主要是速度快,而且支持?jǐn)帱c(diǎn)續(xù)傳,非常方便。下載完成之后,我們會(huì)獲得一個(gè)aosp-latest.tar的文件,這是源碼的壓縮包。


三. 代碼同步更新

?我們將aosp-latest.tar放到大小寫(xiě)敏感的文件系統(tǒng)中,使用tar命令進(jìn)行解壓

tar xf aosp-latest.tar

cd?AOSP

可以獲得一個(gè)AOSP目錄,里面包含一個(gè)隱藏的.repo目錄,我們需要將鏡像站的地址更新到里面的配置文件中。打開(kāi).repo/manifest.xml,找到里面的

<remote name="aosp"

? ? ? ?fetch="https://android.googlesource.com"

? ? ? ?review="android-review.googlesource.com"/>

將? ?fetch="https://android.googlesource.com" 改成?fetch="https://aosp.tuna.tsinghua.edu.cn"

另外,打開(kāi).repo/manifests.git/config,將url = https://android.googlesource.com/platform/manifest 修改為url = https://aosp.tuna.tsinghua.edu.cn/platform/manifest。

做完這些之后,我們將Terminal定位到AOSP目錄,輸入

repo sync

注意:使用清華鏡像的需要注意的是,因?yàn)槲覀冇行薷膍anifest文件,而.repo整個(gè)文件也是通過(guò)git進(jìn)行管理的,所以首次sync會(huì)提示文件沒(méi)有commit,所以需要先到.repo目錄下執(zhí)行g(shù)it 的 add、commit操作。

sync操作需要一個(gè)漫長(zhǎng)到等待過(guò)程,成功后就可以在A(yíng)OSP目錄看到最新的源碼資源。

使用Repo一個(gè)比較好的地方是,即使更新中途斷網(wǎng)了也沒(méi)關(guān)系,因?yàn)槠溆杏洃浌δ埽匦螺斎朐撁睿瑫?huì)跳過(guò)已經(jīng)更新的資源。


四. 查看和切換分支

在A(yíng)OSP目錄下,我們可以用repo來(lái)查看當(dāng)前所有可切換的分支,輸入

cd .repo/manifests

git branch -a | cut -d / -f 3

可以列出所有的分支

從中選擇android-8.1.0_r7,進(jìn)行切換,切換的命令如下

repo init -b?android-8.1.0_r7

repo sync

之后花費(fèi)一些時(shí)間等待切換即可。

五. 編譯

編譯需要執(zhí)行一下幾個(gè)過(guò)程

1. 進(jìn)入到AOSP目錄,執(zhí)行?

make clobber

這會(huì)清除之前的緩存文件。

2. 之后執(zhí)行

source build/envsetup.sh

初始化一些環(huán)境變量

3. 接下來(lái)輸入

lunch aosp_arm-eng

選擇目標(biāo)編譯版本。

如果不想使用該版本的話(huà),我們可以直接輸入lunch,其會(huì)提示所有的可以編譯的版本。

4. 編譯

make -j4

輸入該命令后就會(huì)開(kāi)始執(zhí)行編譯,整個(gè)過(guò)程會(huì)持續(xù)1~2個(gè)小時(shí),請(qǐng)耐心等待。


六. 運(yùn)行

直接在A(yíng)OSP目錄下運(yùn)行

emulator


七. 問(wèn)題記錄處理

? ? 1. bison bug

? ? 我們?cè)诰幾g的時(shí)候可能會(huì)遇到的一個(gè)問(wèn)題,這是AOSP源碼里面的一個(gè)問(wèn)題,解決方法是通過(guò)Terminal

cd? external/bison

git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160

mm

完成后回到AOSP目錄執(zhí)行

cp out/host/darwin-x86/bin/bison? prebuilts/misc/darwin-x86/bison/

之后執(zhí)行make -j4就能正常編譯

該問(wèn)題在?https://groups.google.com/forum/#!msg/android-building/D1-c5lZ9Oco/hPBVZ0ElEAAJ 中有討論到。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容