Mac 10.14 編譯Android 8.0源碼

編譯安卓8.0源碼,直接開涮就是了。
我的系統(tǒng)環(huán)境:
Mac10.14.5
Mac SDK版本:10.11
make版本3.81
編譯安卓版本:android 8.0.0-r31

大綱

1、如何下載安卓源碼
2、如何編譯安卓源碼
看著簡單,實際上坑是無比的多,現(xiàn)在就為了減少小伙伴們浪費寶貴時間,這里根據(jù)mac當(dāng)前最新版系統(tǒng)給大家來個安卓8.0源碼編譯的預(yù)熱。

1、如何下載安卓源碼

一、安裝repo:
確保您的主目錄中有一個 bin/ 目錄,并且它包含在您的路徑中:

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

二、下載 Repo 啟動器,并確保它可執(zhí)行:

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

三、初始化 Repo 客戶端 ,挑選一個空目錄來安置你的repo工作文件

mkdir filePackageName
cd filePackageName

四、運行 repo init 可以獲取最新版本的資源,這里如果你需要獲取指定版本的資源,需要后面跟上指定的版本號。
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
點擊查看安卓版本列表。

repo init
// 指定版本資源,請使用 -b 指定此分支
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r31
// -u 是指定從什么源下載資源,如果google服務(wù)受限,這里你可以使用清華源,具體清華源的只需要把-u后面的地址換成清華源的地址就OK。
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r31

五、要將 Android 源代碼樹從默認(rèn)清單中指定的代碼庫下載到工作目錄

repo sync

這里就是漫長的同步過程。
sync同步完成后,我們就完成了安卓源碼的下載。這里有兩個坑:

  • 安卓源碼資源較大
  • 因為墻的關(guān)系,只能使用第三方鏡像,可能受服務(wù)穩(wěn)定性因素影響
    這里插一句嘴,通過谷歌沒有拉代碼提示time out 的另外一種原因還可能是無權(quán)限,需要對谷歌賬號授權(quán)。https://android.googlesource.com/new-password
    點擊此地址按照提示完成授權(quán)即可。

2、如何編譯源碼

這里由于筆者沒有Ubuntu,窮的只有單位的mac,這里尷尬只會mac環(huán)境配置請見諒。
一、創(chuàng)建文件系統(tǒng)
可以通過 shell 使用以下命令創(chuàng)建文件系統(tǒng):

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

如果后期覺得這個內(nèi)存小了,可以隨時動態(tài)命令修改,但是需要先卸載路徑

//卸載掛載文件
hdiutil detach /Volumes/android
//重新設(shè)置大小
hdiutil resize -size 150g ~/android.dmg.sparseimage
//重新掛載關(guān)聯(lián),之前筆者是在Code根目錄下創(chuàng)建的android.dmg
hdiutil attach ~/Code/android.dmg -mountpoint /Volumes/android

這里有一個坑,筆者在重置大小重啟設(shè)備后依然沒有生效,重復(fù)2次操作后才生效。如何驗證是否生效。

// 查看盤符大小
df -h
df-h命令.png

二、安裝 Xcode 命令行工具
常規(guī)命令如下:

xcode-select --install

但是大伙在新版xcode會發(fā)報錯,Mac最新場景下安裝Xcode時已經(jīng)沒有Command Line了,需要單獨安裝。根據(jù)提示在使用命令xcode-select --install 安裝時最后結(jié)果是不能安裝該軟件。
解決方案:
Developer Apple上手動下載對應(yīng)的Command Line Tools 安裝即可。
三、安裝 MacPortsHomebrew 以進(jìn)行軟件包管理。
如果使用 MacPorts:

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg bison

如果使用 Homebrew:

brew install git gnupg2 bison gmake libsdl

java jdk這些基礎(chǔ)依賴小伙伴們肯定有了,就忽略了啊。
三、設(shè)置文件描述符數(shù)量上限
在 macOS 中,可同時打開的文件描述符的默認(rèn)數(shù)量上限太低,在高度并行的編譯流程中,可能會超出此上限。要提高此上限,請將下列行添加到 ~/.bash_profile 中:

# set the number of open files to be 1024
ulimit -S -n 1024

哈哈,此時此刻激不激動,我們要編譯了。這里建議大家全部采用mac 自己的bash 不要用zsh或者其他第三方bash,容易出現(xiàn)莫名其妙的問題,筆者就是被這些莫名其妙的問題搞了一天,最終切回系統(tǒng)bash完美解決.
四、編譯前的最后一道準(zhǔn)備,清除數(shù)據(jù)

make clobber

這里很多人會遇到下面兩個坑:

  • 找不到j(luò)dk,這個在根目錄的.bash_profile文件中添加
export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

第二個問題是找不到對應(yīng)的MacOSX.sdk,比如找不到MacOSX10.12.sdk,你需要到 https://github.com/phracker/MacOSX-SDKs/releases 下載需要的版本,我這里下載的是MacOSX10.12.sdk,解壓復(fù)制到如下目錄

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

接下來會碰到第三個問題,log如下如下,可能每個人顯示的都不一樣的,注意看是否有external/bison/這些log。參考build aosp on Mac OS 10.13 failed來解決

Patch [bison fix](https://android-review.googlesource.com/c/platform/external/bison/+/517740) for High Sierra and build bison:

    1. cd /Volumes/AOSP/external/bison
    2. git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
    3. mm

Replace prebuilt bison binary with patched binary

    1. cp /Volumes/AOSP/out/host/darwin-x86/bin/bison /Volumes/AOSP/prebuilts/misc/darwin-x86/bison/

Build

    1. make  -j12

如果mm命令無法執(zhí)行,需要回去執(zhí)行以下命令

1. source build/envsetup.sh
2. lunch 之后回到external/bison目錄
3. mm

五、設(shè)置環(huán)境

source build/envsetup.sh

六、lunch
這里在設(shè)備列表里面根據(jù)想要刷機(jī)的設(shè)備自己選擇就好了,一般不選擇就默認(rèn)是1.這里建議啊如果是在自己模擬器上跑就是選x86如果是在其他真機(jī)中,大部分都是arm.
七、編譯代碼

make -jN
// 示例:我的電腦是6核心。就是6*2=12
make -j12

-jN 表示編譯并行任務(wù)數(shù),這個示電腦情況而定,一般取cpu數(shù)的1~2倍就可以
如果你按照我的設(shè)置都設(shè)置過,那你遇到的坑,在上面找不到的就一個了,內(nèi)存不足的坑,哈哈。
我這里是用Mac SDK10.11編譯,如果您的設(shè)備SDK不想換就是10.12或者更高版本請參考http://www.itdecent.cn/p/1513fc9e1a74
至此,安卓編譯8.0源碼篇結(jié)束,接下來會抽空寫如何debug、查閱、完成安卓源碼寫入設(shè)備。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容