techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Mac(EI Capitan)でAndroid(Marshmallow)をBuildする

1. case-sensitiveパーティションを作成

Disk Utility.appから大文字/小文字を区別するファイルシステムでフォーマットされたパーティションを作成しましょう。 OSX標準のパーティションは区別しない様になっているので、Androidソースコードの一部で支障がでます。

  1. Spotlight等からDisk Utility.appを開く
  2. ウィンドウ上部のパーティションを選択
  3. ディスク名は任意、フォーマットにOS X拡張( 大文字/小文字を区別、ジャーナリング)を選択

f:id:kobashin__G:20160315002401p:plain

  1. ディスクサイズは 70G以上は確保しておいた方がよさそう。(shamu向け 6.0.1がビルド後63G程度です)
  2. 作成後、マウントしておく

ツール類のインストール

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)) ####