Mac OS10.14編譯Android9.0源碼

作為一個(gè)Android開發(fā)者沒有編譯過Android源碼怎么能行墓臭,如果還沒編譯過那就趕緊看看下面的內(nèi)容。

先介紹一下Android源碼有關(guān)的一些網(wǎng)址:
源碼官網(wǎng):https://source.android.com/
搭建編譯環(huán)境:https://source.android.com/source/initializing.html
下載源代碼:https://source.android.com/source/downloading.html
編譯 Android:https://source.android.com/setup/build/building
Android鏡像:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

一、設(shè)置 Mac OS 編譯環(huán)境

創(chuàng)建區(qū)分大小寫的磁盤映像

Mac OS 默認(rèn)會(huì)在不區(qū)分大小寫的文件系統(tǒng)中運(yùn)行谜喊。Git 并不支持此類文件系統(tǒng),而且此類文件系統(tǒng)會(huì)導(dǎo)致某些 Git 命令(例如 git status)的行為出現(xiàn)異常倦始。因此斗遏,建議在區(qū)分大小寫的文件系統(tǒng)中對(duì) AOSP 源文件進(jìn)行操作。

1鞋邑、shell命令創(chuàng)建

可以通過 shell 使用以下命令創(chuàng)建磁盤映像:

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

這將創(chuàng)建一個(gè) .dmg(也可能是 .dmg.sparseimage)文件诵次,該文件在裝載后可用作具有 Android 開發(fā)所需格式的存儲(chǔ)卷。

如果以后需要更大的存儲(chǔ)卷炫狱,還可以使用以下命令來調(diào)整稀疏映像的大性謇痢:

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
  • 要載磁盤映像,請(qǐng)運(yùn)行以下命令:
hdiutil attach ~/android.dmg -mountpoint /Volumes/android
  • 要卸載磁盤映像视译,請(qǐng)運(yùn)行以下命令:
hdiutil detach /Volumes/android

裝載 android 存儲(chǔ)卷后嬉荆,您將在其中開展所有工作。您可以像對(duì)待外接式存儲(chǔ)盤一樣將其彈出(卸載)酷含。

2鄙早、磁盤工具創(chuàng)建

image1.png
image2.png

設(shè)置文件描述符數(shù)量上限

在 Mac OS 中,可同時(shí)打開的文件描述符的默認(rèn)數(shù)量上限太低椅亚,在高度并行的編譯流程中限番,可能會(huì)超出此上限。

要提高此上限呀舔,請(qǐng)將下列行添加到 ~/.bash_profile 中:

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

二弥虐、下載Android源碼

1扩灯、安裝 Repo

Repo 是一款工具,可讓您在 Android 環(huán)境中更輕松地使用 Git
1.要安裝 Repo霜瘪,請(qǐng)執(zhí)行以下操作:
確保主目錄下有一個(gè) bin/ 目錄珠插,并且該目錄包含在路徑中:

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

2.下載 Repo 工具,并確保它可執(zhí)行:

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

2颖对、初始化 Repo 客戶端

運(yùn)行 repo init 以獲取最新版本的 Repo 及其最近的所有錯(cuò)誤更正內(nèi)容捻撑。您必須為清單指定一個(gè)網(wǎng)址,該網(wǎng)址用于指定 Android 源代碼中包含的各個(gè)代碼庫將位于工作目錄中的什么位置缤底。

repo init -u https://android.googlesource.com/platform/manifest

要對(duì)“master”以外的分支進(jìn)行校驗(yàn)顾患,請(qǐng)使用 -b 來指定相應(yīng)分支。要查看分支列表个唧,請(qǐng)參閱源代碼標(biāo)記和版本江解。

repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r42

三、下載 Android 源代碼

要將 Android 源代碼樹從默認(rèn)清單中指定的代碼庫下載到工作目錄坑鱼,請(qǐng)運(yùn)行以下命令:

repo sync

四膘流、編譯 Android

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

使用 envsetup.sh 腳本初始化環(huán)境鲁沥。

source build/envsetup.sh
或
. build/envsetup.sh

2、選擇目標(biāo)

使用 lunch 選擇要編譯的目標(biāo)耕魄。確切的配置可作為參數(shù)進(jìn)行傳遞画恰。例如,以下命令表示針對(duì)模擬器進(jìn)行完整編譯吸奴,并且啟用所有調(diào)試功能.

lunch aosp_arm-eng

如果在沒有參數(shù)的情況下運(yùn)行允扇,則 lunch 會(huì)提示您從菜單中選擇目標(biāo)。要了解所有現(xiàn)有設(shè)備的編譯配置则奥,請(qǐng)參閱選擇設(shè)備編譯系統(tǒng)一文考润。
所有編譯目標(biāo)都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能組合的代號(hào)读处。BUILDTYPE 是以下類型之一
user 權(quán)限受限糊治;適用于生產(chǎn)環(huán)境
userdebug 與“user”類似,但具有 root 權(quán)限和調(diào)試功能罚舱;是進(jìn)行調(diào)試時(shí)的首選編譯類型
eng 具有額外調(diào)試工具的開發(fā)配置

五井辜、編譯代碼

請(qǐng)使用 make 進(jìn)行所有編譯。make 可以使用 -jN 參數(shù)處理并行任務(wù)管闷。如果您未提供 -j 參數(shù)粥脚,編譯系統(tǒng)便會(huì)自動(dòng)選擇其認(rèn)為對(duì)您的系統(tǒng)最佳的并行任務(wù)計(jì)數(shù)。

編譯完成后out/target/product/generic 目錄生成了三個(gè)重要的鏡像文件: system.img包个、userdata.img刷允、ramdisk.img:
system.img:系統(tǒng)鏡像,里面包含了Android系統(tǒng)主要的目錄和文件,通過init.c進(jìn)行解析并mount掛載到/system目錄下树灶。
userdata.img:用戶鏡像纤怒,是Android系統(tǒng)中存放用戶數(shù)據(jù)的,通過init.c進(jìn)行解析并mount掛載到/data目錄下破托。
ramdisk.img:根文件系統(tǒng)鏡像肪跋,包含一些啟動(dòng)Android系統(tǒng)的重要文件,比如init.rc土砂。

六州既、啟動(dòng)模擬器

source build/envsetup.sh
lunch  aosp_x86_64-eng
emulator -partition-size 2562 -memory 2048

七、Android源碼導(dǎo)入Android Studio

1萝映、由于Android太大了,所以我們需要給IDE更多的內(nèi)存:
在Help > Edit Custom VM 中添加:

-Xms1g
-Xmx5g

這兩個(gè)參數(shù)的意思是初始堆內(nèi)存為1G,最大堆內(nèi)存為5G,
2吴叶、AndroidStudio的類大小配置,在Help -> Edit custom properties中添加:

idea.max.intellisense.filesize=100000

這個(gè)參數(shù)是定義AS默認(rèn)的類大小的,默認(rèn)值是2500,會(huì)導(dǎo)致太大的Java文件不能被識(shí)別,把這個(gè)數(shù)調(diào)大了之后,就可以導(dǎo)入更大的Java文件。
配置完成后重啟IDE
3序臂、源碼導(dǎo)入
首先我們還是要執(zhí)行一遍上述的source build/envsetup.sh 命令和 lunch 命令,當(dāng)然,如果終端沒有關(guān)閉的話,可以省略這一步,
然后執(zhí)行

mmm development/tools/idegen

編譯生成idegen.jar蚌卤,生成完idegen.jar之后,就可以使用命令來掃描生成ipr文件了:

sudo ./development/tools/idegen/idegen.sh

此時(shí)在根目錄下,就已經(jīng)生成了android.ipr奥秆、android.iml逊彭,可以將整個(gè)源代碼導(dǎo)入AS。
(可選)設(shè)置模塊過濾
有些不想導(dǎo)入AS的模塊构订,可以通過在android.iml中加入excludeFolder侮叮,達(dá)到過濾效果。

<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/abi"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/art"/>
<excludeFolder url="file://$MODULE_DIR$/bionic"/>
<excludeFolder url="file://$MODULE_DIR$/bootable"/>
<excludeFolder url="file://$MODULE_DIR$/out"/>
<excludeFolder url="file://$MODULE_DIR$/pdk"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
<excludeFolder url="file://$MODULE_DIR$/sdk"/>
<excludeFolder url="file://$MODULE_DIR$/system"/>
<excludeFolder url="file://$MODULE_DIR$/tools"/>
<excludeFolder url="file://$MODULE_DIR$/trusty"/>
<excludeFolder url="file://$MODULE_DIR$/vendor"/>
...

八悼瘾、編譯中遇到的問題


ninja: build stopped: subcommand failed.
14:03:54 ninja failed with: exit status 1

https://github.com/phracker/MacOSX-SDKs/releases
下載sdk 12.0版本囊榜,解壓,然后copy到
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亥宿,一起剝皮案震驚了整個(gè)濱河市卸勺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烫扼,老刑警劉巖曙求,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異材蛛,居然都是意外死亡圆到,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門卑吭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芽淡,“玉大人,你說我怎么就攤上這事豆赏≌醴疲” “怎么了富稻?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長白胀。 經(jīng)常有香客問我椭赋,道長,這世上最難降的妖魔是什么或杠? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任哪怔,我火速辦了婚禮,結(jié)果婚禮上向抢,老公的妹妹穿的比我還像新娘认境。我一直安慰自己,他們只是感情好挟鸠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布叉信。 她就那樣靜靜地躺著,像睡著了一般艘希。 火紅的嫁衣襯著肌膚如雪硼身。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天覆享,我揣著相機(jī)與錄音佳遂,去河邊找鬼。 笑死撒顿,一個(gè)胖子當(dāng)著我的面吹牛讶迁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播核蘸,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼啸驯!你這毒婦竟也來了客扎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤罚斗,失蹤者是張志新(化名)和其女友劉穎徙鱼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體针姿,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袱吆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了距淫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绞绒。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖榕暇,靈堂內(nèi)的尸體忽然破棺而出蓬衡,到底是詐尸還是另有隱情喻杈,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布狰晚,位于F島的核電站筒饰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏壁晒。R本人自食惡果不足惜瓷们,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秒咐。 院中可真熱鬧谬晕,春花似錦、人聲如沸反镇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歹茶。三九已至夕玩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惊豺,已是汗流浹背燎孟。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尸昧,地道東北人揩页。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像烹俗,于是被迫代替她去往敵國和親爆侣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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