mac10.12 編譯 android-7.0 源碼

下載源碼

你可以從 google 或 清華的鏡像進(jìn)行同步次坡,android 源碼非常大(20 - 50 G)通常都要同步好幾天麻昼,而且中間還不斷出錯斷開祠乃。

當(dāng)然你也可以下載或拷貝別人下載好的源碼优妙,這樣不好的地方是不能同步最新的代碼了助琐。如果你下載的源碼中有 .repo 文件夾應(yīng)該也是可以同步最新代碼的。

我從百度網(wǎng)盤 https://pan.baidu.com/s/1ngsZs 下載了 android-7.0.0_r1 源碼舅巷, 7zip 壓縮后 6.73G羔味。

推薦用 https://github.com/iikira/BaiduPCS-Go 工具下載,我下載時能達(dá)到 7M/s , 20 分鐘就下載完了钠右。

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

主要參考官網(wǎng) https://source.android.google.cn/setup/build/initializing

mac 文件系統(tǒng)是大小寫不敏感的赋元,可能導(dǎo)致編譯出錯,所以第一步新建一個大寫小敏感的磁盤飒房。
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg

源碼是 23G, 編譯后是 60G搁凸, 所以建議新建磁盤至少 80G
這條命令會在用戶主目錄下面生成 android.dmg 鏡像文件

new disk image.png

雙擊 android.dmg.sparseimage 掛載這個磁盤,把原代碼拷貝到新建的磁盤中

安裝依賴
  • JDK1.8 (android7.0 ~ android8.0 需要 JDK1.8)
  • Xcode
  • Xcode command line tools (通過 xcode-select --install 命令安裝)
  • 安裝 MacPorts, 從這里下載相應(yīng)版本 https://www.macports.org/install.php
  • 用 MacPort 安裝其它依賴庫
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
設(shè)置最大打開文件數(shù)
ulimit -S -n 1024

編譯

source build/envsetup.sh
報錯
WARNING: Only bash is supported, use of other shell would lead to erroneous results

直接切換到 bash狠毯, 輸入 bash 命令

執(zhí)行 lunch 
make -j8   # 開啟 8 線程編譯
報錯找不到 SDK
2018-03-28 21:46:59.877 xcodebuild[31923:2630108] Failed to load plugin at: /Users/lesliefang/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin, skipping.  Reason for failure: *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
build/core/combo/mac_version.mk:26: none of the installed SDKs (ac_sdk_versions_installed) match supported versions (10.8 10.9 10.10 10.11), trying 10.8
build/core/combo/mac_version.mk:36: no SDK 10.8 at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk, trying legacy dir
build/core/combo/mac_version.mk:40: *****************************************************
build/core/combo/mac_version.mk:41: * Can not find SDK 10.8 at /Developer/SDKs/MacOSX10.8.sdk
build/core/combo/mac_version.mk:42: *****************************************************
build/core/combo/mac_version.mk:43: *** Stop..  Stop.

build/core/combo/mac_version.mk 中配置的 SDK 是

mac_sdk_versions_supported :=  10.8 10.9 10.10 10.11

而我系統(tǒng)中只有 10.12
Xcode SDK 路徑是

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

從這里 https://github.com/phracker/MacOSX-SDKs/releases 下載 10.11 扔到 SDK 目錄里面就行了

sdk.png

繼續(xù) make ,編譯到 45%報錯护糖,內(nèi)存不足,坑爹啊嚼松。所以這里大家務(wù)必提前設(shè)置

[ 45% 14861/32771] Building with Jack: out/target/common/ob...VA_LIBRARIES/framework_intermediates/with-local/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
[ 45% 14861/32771] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/colorpicker_intermediates/classes.jack
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1

我們對prebuilts/sdk/tools/jack-admin文件進(jìn)行如下修改:
1.找到如下語句:

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"

2.將上述語句修改為:

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

主要是添加了-Xmx4096m參數(shù)嫡良,接下來在源碼目錄下執(zhí)行如下命令重啟jack-admin服務(wù):

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

重啟完jack-admin服務(wù)后,此時再重新執(zhí)行編譯命令就能編譯通過ninja了

compile.png

編譯了1小時18分 編譯成功

執(zhí)行 emulator 命令啟動模擬器
emualtor.png

模擬器特別卡献酗,要有耐心

怎么沒有編譯 Linux 內(nèi)核寝受??罕偎? prebuilts/qemu-kernel 下面有編譯好的內(nèi)核鏡像, 我編譯的 target 是 aosp_arm_eng, 不帶任何參數(shù)啟動模擬器使用的內(nèi)核鏡像就是 prebuilts/qemu-kernel/arm/kernel-qemu

如果你有 Nexus 或 Pixel 手機(jī)就可以把 ROM 刷到手機(jī)里面了

android源碼編譯后在 out/target/product/generic 下生成
system.img很澄, ramdisk.img,userdata.img 鏡像文件颜及。

  • ramdisk.img 是emulator的文件系統(tǒng)
  • system.img 包括了主要的包, 庫等文件
  • userdata.img 包括了一些用戶數(shù)據(jù)

emulator加載這3個鏡像文件后, 會把 system 和 userdata 分別加載到 ramdisk 文件系統(tǒng)中的 system 和 userdata 目錄下

接下來我們就可以學(xué)習(xí)修改 framework 層代碼并編譯測試了甩苛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市俏站,隨后出現(xiàn)的幾起案子讯蒲,更是在濱河造成了極大的恐慌,老刑警劉巖乾翔,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爱葵,死亡現(xiàn)場離奇詭異,居然都是意外死亡反浓,警方通過查閱死者的電腦和手機(jī)萌丈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雷则,“玉大人辆雾,你說我怎么就攤上這事≡屡” “怎么了度迂?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵藤乙,是天一觀的道長。 經(jīng)常有香客問我惭墓,道長坛梁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任腊凶,我火速辦了婚禮划咐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钧萍。我一直安慰自己褐缠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布风瘦。 她就那樣靜靜地躺著队魏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪万搔。 梳的紋絲不亂的頭發(fā)上胡桨,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音蟹略,去河邊找鬼登失。 笑死遏佣,一個胖子當(dāng)著我的面吹牛挖炬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播状婶,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼意敛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了膛虫?” 一聲冷哼從身側(cè)響起草姻,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稍刀,沒想到半個月后撩独,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账月,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年综膀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片局齿。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡剧劝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抓歼,到底是詐尸還是另有隱情讥此,我是刑警寧澤拢锹,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站萄喳,受9級特大地震影響卒稳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜他巨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一展哭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闻蛀,春花似錦匪傍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薪棒,卻和暖如春手蝎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俐芯。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工棵介, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吧史。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓邮辽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贸营。 傳聞我的和親對象是個殘疾皇子吨述,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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