Mac下編譯Android源碼苗傅,并導(dǎo)入IntelliJ IDEA進(jìn)行源碼閱讀

  • macOS High Sierra 版本 10.13.4
  • Xcode 9.3
  • aosp分支:android-8.1.0_r20

準(zhǔn)備編譯環(huán)境

具體參考官方文檔

  1. 安裝 jdk8u45 or newer
  2. 安裝xcode命令行
xcode-select --install
  1. 安裝編譯需要用到的其他包
    使用Homebrew安裝(官方文檔使用的是MacPorts)
brew install gmake libsdl git gnupg

NOTE: gmake 可以不用安裝剪况,使用xcode自帶的就可以

  1. 設(shè)置可以同時打開的文件數(shù)限制探遵,避免編譯時超出限制
    在 ~/.bash_profile 添加如下語句
# set the number of open files to be 1024
ulimit -S -n 1024
  1. 創(chuàng)建區(qū)分大小寫的APFS宗卷
    官方文檔創(chuàng)建的是區(qū)分大小寫HFS+磁盤鏡像番挺,我們這邊使用區(qū)分大小寫的APFS卷宗
    APFS宗卷描述.png
    1. 打開磁盤工具按下圖步驟操作:


      添加APFS卷宗.png
    2. 設(shè)置宗卷大小
      具體大小根據(jù)自己情況設(shè)定姆坚,配額大小最好不要小于200G
      設(shè)置APFS卷宗大小.png

下載源碼

具體參考官方文檔-下載源碼囱晴。
本文使用清華大學(xué)aosp鏡像下載源碼膏蚓,具體步驟參考清華大學(xué)aosp鏡像提供的教程。

  1. 下載repo
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod +x ~/bin/repo

在~/.bash_profile中將剛才創(chuàng)建的~/bin目錄添加進(jìn)PATH

export PATH=~/bin:$PATH
  1. 建立工作目錄
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
  1. 初始化倉庫
    指定master分支
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

若要指定android版本畸写,如下:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r20
  1. 同步源碼樹
    repo sync 或者 repo sync -j4 # 指定并發(fā)數(shù)
    NOTE: repo sync有時會失敗驮瞧,可能要運行多次,才能同步完源碼枯芬,可以使用以下循環(huán)腳本:
#!/usr/bin/env bash
repo sync -j4
while [ $? -ne 0 ]
do
    repo sync -j4
done

編譯源碼

具體參考官方文檔-編譯源碼

source build/envsetup.sh
lunch aosp_x86_64-eng # 或者直接運行l(wèi)unch论笔, 在出現(xiàn)的選項中選擇編譯目標(biāo)
make -j8 # 根據(jù)cpu核心數(shù)(物理線程)選擇并發(fā)數(shù)采郎,公式:并發(fā)數(shù)=cpu核心數(shù)(物理線程) x 2

編譯過程比較漫長,在我的機(jī)子上大概用了2個多小時

編譯遇到的問題

  1. mac sdk10.13 不支持編譯狂魔,如下:
    internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]

[44/44] bootstrap out/soong/.minibootstrap/build.ninja.in
[4/4] out/soong/.bootstrap/bin/minibp out/soong/.bootstrap/build.ninja
[860/861] glob external/clang/utils/TableGen/Android.bp
[54/54] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -b out/soong -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"]
ninja: build stopped: subcommand failed.
20:24:32 soong failed with: exit status 1

解決方法
修改AOSP/build/soong/cc/config/x86_darwin_host.go文件蒜埋,添加10.13支持,如下

darwinSupportedSdkVersions = []string{
    "10.10",
    "10.11",
    "10.12",
    "10.13", // 添加mac sdk 10.13
}
  1. 遇到bison錯誤

FAILED: out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --defines=out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h -o out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c external/selinux/checkpolicy/policy_parse.y

解決方法
bison打補(bǔ)丁最楷,重新編譯(Patch bison fix for High Sierra and build bison:):

cd AOSP/external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
mm
cp AOSP/out/host/darwin-x86/bin/bison AOSP/prebuilts/misc/darwin-x86/bison/

將源碼導(dǎo)入IntelliJ IDEA

導(dǎo)入IDEA前 - 配置

  1. 運行如下命令整份,生成IDE工程信息文件 android.iprandroid.iml
source build/envsetup.sh # 在新終端下需要執(zhí)行這一步
mmma development/tools/idegen
development/tools/idegen/idegen.sh
  1. 由于aosp工程很大,在導(dǎo)入IDEA前需要先修改配置:
    1. 修改VM內(nèi)存大小
      打開IDEA 菜單欄 Help > Edit Custom VM Options籽孙,添加
-Xms1g 
-Xmx5g
  1. 修改文件大小限制烈评,打開區(qū)分大小寫選項
    打開IDEA 菜單欄 Help -> Edit custom properties, 添加
idea.max.intellisense.filesize=100000
idea.case.sensitive.fs=true

NOTE: 重啟IDEA使配置生效

  1. 用IDEA找到AOSP目錄下的android.ipr文件犯建,打開AOSP工程讲冠,耐心等待,索引需要一定時間

導(dǎo)入IDEA后 - 配置

  1. 創(chuàng)建SDK 1.8 (No Libraries)适瓦,確保代碼跳轉(zhuǎn)到是aosp源碼竿开,而不是系統(tǒng)安裝的JDK,如下
    NOTE 注意要刪掉Classpath里面所有的jar
    創(chuàng)建JDK1.8 (No Libraries).png
  2. 刪除Modules中的dependencies玻熙,只保留<Module source>1.8 (No Libraries)
    刪除Modules中的dependencies.png
  3. 將生成的資源文件ID目錄out/target/common/R添加進(jìn)源碼目錄德迹,避免R資源索引找不到,如圖:
    添加資源文件R進(jìn)源碼目錄.png

最后 Synchronize 整個工程同步下(打開IDEA菜單 File -> Synchronize)揭芍,稍稍等待后就可以愉快的閱讀Android源碼了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卸例,一起剝皮案震驚了整個濱河市称杨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筷转,老刑警劉巖姑原,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呜舒,居然都是意外死亡锭汛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門袭蝗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唤殴,“玉大人,你說我怎么就攤上這事到腥《涫牛” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵乡范,是天一觀的道長配名。 經(jīng)常有香客問我啤咽,道長,這世上最難降的妖魔是什么渠脉? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任宇整,我火速辦了婚禮,結(jié)果婚禮上芋膘,老公的妹妹穿的比我還像新娘鳞青。我一直安慰自己,他們只是感情好索赏,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布盼玄。 她就那樣靜靜地躺著,像睡著了一般潜腻。 火紅的嫁衣襯著肌膚如雪埃儿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天融涣,我揣著相機(jī)與錄音童番,去河邊找鬼。 笑死威鹿,一個胖子當(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
  • 我被黑心中介騙來泰國打工奏窑, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屈扎。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓埃唯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鹰晨。 傳聞我的和親對象是個殘疾皇子墨叛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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