Mac Mojave編譯AOSP趟坑

編譯AOSP源碼 官方文檔寫的很詳細(xì)放典,Mac上有幾個坑需要注意下:(OS 10.14.5)
錯誤零區(qū)分大小寫的磁盤分區(qū)
官方文檔Creating a case-sensitive disk image也是有的,但是我感覺文檔放的稍微位置靠后,有時候會導(dǎo)致前面事情白做滋将。原因是Mac文件系統(tǒng)不區(qū)分大小寫,但是AOSP編譯要求區(qū)分大小寫江醇。
步驟:打開Disk Utility (磁盤工具)然后添加一個Volume救巷,記得選擇區(qū)分大小寫的選項就好了

錯誤一:找不到 JDK 的 tools.jar 包

build/core/config.mk:663: error: Error: could not find jdk tools.jar at /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/…/lib/tools.jar, please check if your JDK was installed correctly.

我首先 Java -v 看了下 JDK 確實是安裝了的,且包含在系統(tǒng)路徑下贬循,后來發(fā)現(xiàn)編譯時使用的環(huán)境變量并不是 “JAVA_HOME” 而是 “ANDROID_JAVA_HOME”咸包,解決方法很簡單,就是在~/.bash_profile 中添加
export ANDROID_JAVA_HOME=$JAVA_HOME

錯誤二:找不到對應(yīng)的 sdk 版本

FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -o out/soong/build.ninja Android.bp
internal error: Could not find a supported mac sdk: [“10.10” “10.11” “10.12” “10.13”]
ninja: build stopped: subcommand failed.

運行命令查看本機安裝的 sdk 版本

find /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs -iname "*.sdk"

發(fā)現(xiàn)我本機安裝的版本是 10.14杖虾,確實不在配置文件的要求中烂瘫,最簡單粗暴的方法就是修改配置文件,在 /build/soong/cc/config/x86_darwin_host.godarwinSupportedSdkVersions 變量中添加對應(yīng)的版本奇适。

事實證明坟比,這樣子做是不行的芦鳍,編譯之后出現(xiàn)了新的問題,就是 MacOSX10.14.sdk 版本導(dǎo)致的

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSUUID.h:26:49: error: nullability specifier ‘_Nullable’ cannot be applied to non-pointer type ‘uuid_t’ (aka ‘unsigned char [16]’)
(instancetype)initWithUUIDBytes:(const uuid_t _Nullable)bytes;
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSUUID.h:29:30: error: nullability specifier ‘_Nonnull’ cannot be applied to non-pointer type ‘uuid_t’ (aka ‘unsigned char [16]’)
(void)getUUIDBytes:(uuid_t _Nonnull)uuid;

(所以温算,這個故事告訴我們怜校,不要隨便亂改配置文件,別人沒有寫新的版本肯定是有原因的)
于是下載了一個低版本的 MacOSX.sdk注竿,解壓復(fù)制到 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ 目錄下
注意下載文件是 .tar.xz 格式的茄茁,需要先用 xz -d 將 XXX.tar.xz 文件解壓成 XXX.tar 格式,然后用tar -xvf 解壓

錯誤三:Mac OS 版本過高導(dǎo)致 bison 有什么問題(我也不太清楚)

FAILED: out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.cpp
out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.h
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --defines=out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.h -o out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.cpp system/tools/aidl/aidl_language_y.yy
[ 2% 1270/59686] cc out/soong/.intermediates/system/core/adf/libadf/libadf/android_arm_armv7-a_static_core/obj/system/core/adf/libadf/adf.o
ninja: build stopped: subcommand failed.
11:47:11 ninja failed with: exit status 1
make: *** [run_soong_ui] Error 1

解決辦法是安裝 bison 的補丁并重新編譯
首先進入 bison 的目錄巩割,并安裝補丁

cd /external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160

重新編譯

mm

這里 mm 命令如果執(zhí)行失效裙顽,則需退回根目錄重新執(zhí)行 source build/envsetup.shlunch XXX,然后再回來執(zhí)行 mm

編譯成功后宣谈,替換 bison 目錄愈犹,然后重新編譯即可

cp /Volumes/Android/android-8.1.0_r1/out/host/darwin-x86/bin/bison /Volumes/Android/android-8.1.0_r1/prebuilts/misc/darwin-x86/bison/

錯誤四:內(nèi)存不夠了

GC overhead limit exceeded.
Try increasing heap size with java option ‘-Xmx’.

怎么操作都提示了,就是增加虛擬機的堆棧

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"

修改后注意重啟下服務(wù)

./prebuilts/sdk/tools/jack-admin kill-server 
./prebuilts/sdk/tools/jack-admin start-server

編譯完了之后闻丑,屏幕會出現(xiàn)這樣的畫面漩怎,就表示成功了(順便吐槽一句編譯完整個源碼目錄大概占了 128 GB 左右的磁盤空間,闊怕)

寫著寫著嗦嗡,發(fā)現(xiàn)了一篇文章寫的很好勋锤,防止鏈接過時,拷貝了內(nèi)容侥祭,附鏈接:
https://www.twblogs.net/a/5c9941bcbd9eee68b3b5abbd/zh-cn

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叁执,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子矮冬,更是在濱河造成了極大的恐慌谈宛,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胎署,死亡現(xiàn)場離奇詭異吆录,居然都是意外死亡,警方通過查閱死者的電腦和手機琼牧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門径筏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人障陶,你說我怎么就攤上這事×难担” “怎么了抱究?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長带斑。 經(jīng)常有香客問我鼓寺,道長勋拟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任妈候,我火速辦了婚禮敢靡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苦银。我一直安慰自己啸胧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布幔虏。 她就那樣靜靜地躺著纺念,像睡著了一般。 火紅的嫁衣襯著肌膚如雪想括。 梳的紋絲不亂的頭發(fā)上陷谱,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音瑟蜈,去河邊找鬼烟逊。 笑死,一個胖子當(dāng)著我的面吹牛铺根,可吹牛的內(nèi)容都是我干的宪躯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼夷都,長吁一口氣:“原來是場噩夢啊……” “哼眷唉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起囤官,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冬阳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后党饮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肝陪,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年刑顺,在試婚紗的時候發(fā)現(xiàn)自己被綠了氯窍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹲堂,死狀恐怖狼讨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柒竞,我是刑警寧澤政供,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響布隔,放射性物質(zhì)發(fā)生泄漏离陶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一衅檀、第九天 我趴在偏房一處隱蔽的房頂上張望招刨。 院中可真熱鬧,春花似錦哀军、人聲如沸沉眶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沦寂。三九已至,卻和暖如春淘衙,著一層夾襖步出監(jiān)牢的瞬間传藏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工彤守, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毯侦,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓具垫,卻偏偏與公主長得像侈离,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筝蚕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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