Mac(EI Capitan)でAndroid(Marshmallow)をBuildする
1. case-sensitiveなパーティションを作成
Disk Utility.appから大文字/小文字を区別するファイルシステムでフォーマットされたパーティションを作成しましょう。 OSX標準のパーティションは区別しない様になっているので、Androidのソースコードの一部で支障がでます。
- ディスクサイズは 70G以上は確保しておいた方がよさそう。(shamu向け 6.0.1がビルド後63G程度です)
- 作成後、マウントしておく
ツール類のインストール
jdkのインストール
masterをビルドする場合は、open jdk 8を 6.0.X系の場合は open jdk 7をインストールする。
また、JDKをインストールしていてもエラーが出る場合がある。
************************************************************ You are attempting to build with the incorrect version of java. Your version is: Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b14) Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode). The required version is: "1.7.x" Please follow the machine setup instructions at https://source.android.com/source/initializing.html ************************************************************ build/core/main.mk:171: *** stop. Stop.
その場合は、下記コマンドを叩く。
$ unset JAVA_TOOL_OPTIONS
xcode install
App Storeから最新バージョンのXcodeをインストールしましょう。 手元の環境では、Xcode 7.2.1をインストールしました。
command line tool install
xcodeのコマンドラインツールが必要になるので、インストールしておきます。 色々なインストール手段があるようですが、下記コマンドでのインストールが一番楽そうです。
$ xcode-select --install
2. ソースを落としてくる
repoのinstall
下記でrepoのインストールを行う。 ~/binが無ければ作ってPATHを通しておく。
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
ソースコードのダウンロード
取得したいソースコードのbranch or tagをmanifestのrepositoryから選んでおく。
ここでは、android-6.0.1_r22
を選択した
$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r22
また、一度ダウンロードしたソースコードをベースに別のbranch or tagをダウンロードしたい場合は、次のコマンドでも良い。 ダウンロード済みのリソースを再利用するので、多少は早くなる。
$ repo init -b android-6.0.1_r22
Nexus binariesをダウンロードし展開する
ターゲットデバイスがある場合は、Binaries for Nexus Devicesからドライバ類をダウンロードして展開しておく。 ここでは、shamu(Nexus6)向けのビルドを行った。
$ cd <project root> $ tar xvf ~/Downloads/ $ tar xvf ~/Downloads/qcom-shamu-mmb29k-a6547aed.tgz $ tar xvf ~/Downloads/moto-shamu-mmb29k-8bec5a4f.tgz $ tar xvf ~/Downloads/broadcom-shamu-mmb29k-f74cff81.tgz $ ./extract-broadcom-shamu.sh $ ./extract-moto-shamu.sh $ ./extract-qcom-shamu.sh
ビルド環境が参照する OSX SDKを生成する
Androidのビルド環境は/Developer/SDKs/MacOSX10.6.sdk
を参照するようになっている。
OSXおよびXcodeのバージョンが進んでいるため、symlinkで対応する。
$ sudo mkdir -p /Developer/SDKs/ $ sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk /Developer/SDKs/MacOSX10.6.sdk
ビルド環境の期待するOSXバージョン情報を追記する
AOSPのままでは、10.9までのサポートとなっている。 これを10.11までに拡張する。(6.0.1のソースコードでは支障なくビルドできたが他環境でどうかは試していない)
$ vim build/core/combo/mac_version.mk
diff --git a/core/combo/mac_version.mk b/core/combo/mac_version.mk index 6defba7..90cecea 100644 --- a/core/combo/mac_version.mk +++ b/core/combo/mac_version.mk @@ -9,7 +9,7 @@ ifndef build_mac_version build_mac_version := $(shell sw_vers -productVersion) -mac_sdk_versions_supported := 10.6 10.7 10.8 10.9 +mac_sdk_versions_supported := 10.6 10.7 10.8 10.9 10.10 10.11 ifneq ($(strip $(MAC_SDK_VERSION)),) mac_sdk_version := $(MAC_SDK_VERSION) ifeq ($(filter $(mac_sdk_version),$(mac_sdk_versions_supported)),)
3. buildする
これで一通りの設定ができたので、ビルドコマンドを実行する。 zshの問題かlunchコマンドが上手く動いていない場合があるので、make実行時のtarget情報に注意を払っておくこと。 lunchの引数に指定した場合は期待通りに動作した。
$ cd <project root> $ source build/envsetup.sh $ lunch aosp_shamu-userdebug $ make -j8 ... #### make completed successfully (58:57 (mm:ss)) ####