- macOS High Sierra 版本 10.13.4
- Xcode 9.3
- aosp分支:android-8.1.0_r20
準(zhǔn)備編譯環(huán)境
具體參考官方文檔
- 安裝 jdk8u45 or newer
- 安裝xcode命令行
xcode-select --install
brew install gmake libsdl git gnupg
NOTE: gmake 可以不用安裝剪况,使用xcode自帶的就可以
- 設(shè)置可以同時打開的文件數(shù)限制探遵,避免編譯時超出限制
在 ~/.bash_profile 添加如下語句
# set the number of open files to be 1024
ulimit -S -n 1024
- 創(chuàng)建區(qū)分大小寫的APFS宗卷
官方文檔創(chuàng)建的是區(qū)分大小寫HFS+磁盤鏡像番挺,我們這邊使用區(qū)分大小寫的APFS卷宗
-
打開磁盤工具按下圖步驟操作:
- 設(shè)置宗卷大小
具體大小根據(jù)自己情況設(shè)定姆坚,配額大小最好不要小于200G
-
下載源碼
具體參考官方文檔-下載源碼囱晴。
本文使用清華大學(xué)aosp鏡像下載源碼膏蚓,具體步驟參考清華大學(xué)aosp鏡像提供的教程。
- 下載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
- 建立工作目錄
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
- 初始化倉庫
指定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
- 同步源碼樹
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個多小時
編譯遇到的問題
-
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
}
- 遇到
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前 - 配置
- 運行如下命令整份,生成IDE工程信息文件 android.ipr 和 android.iml
source build/envsetup.sh # 在新終端下需要執(zhí)行這一步
mmma development/tools/idegen
development/tools/idegen/idegen.sh
- 由于aosp工程很大,在導(dǎo)入IDEA前需要先修改配置:
- 修改VM內(nèi)存大小
打開IDEA 菜單欄 Help > Edit Custom VM Options籽孙,添加
- 修改VM內(nèi)存大小
-Xms1g
-Xmx5g
- 修改文件大小限制烈评,打開區(qū)分大小寫選項
打開IDEA 菜單欄 Help -> Edit custom properties, 添加
idea.max.intellisense.filesize=100000
idea.case.sensitive.fs=true
NOTE: 重啟IDEA使配置生效
- 用IDEA找到AOSP目錄下的android.ipr文件犯建,打開AOSP工程讲冠,耐心等待,索引需要一定時間
導(dǎo)入IDEA后 - 配置
- 創(chuàng)建SDK 1.8 (No Libraries)适瓦,確保代碼跳轉(zhuǎn)到是aosp源碼竿开,而不是系統(tǒng)安裝的JDK,如下
NOTE 注意要刪掉Classpath里面所有的jar
- 刪除Modules中的dependencies玻熙,只保留
<Module source>
和1.8 (No Libraries)
- 將生成的資源文件ID目錄
out/target/common/R
添加進(jìn)源碼目錄德迹,避免R資源索引找不到,如圖: