Android 3.2 SDK をMac(OS X 10.7 Lion)でビルドする手順

備忘録エントリ。
Android 3.2のSDKをLionでビルドしたので手順をメモしておく。
基本的には、公式ドキュメントの以下の手順に従えばよい。
手順ではSnow Leopard使えとか、MacPorts使うようになっているが、その辺りは変えている。
http://source.android.com/source/initializing.html
http://source.android.com/source/downloading.html
http://source.android.com/source/building.html

1.Xcode 3のインストール

Mac Dev CenterよりXcode 3をダウンロードする。無料だがアカウント登録が必要。
取得したバージョンは、xcode_3.2.6_and_ios_sdk_4.3だった。
最新版のXcode 4はApp Storeにあるが、Xcode 4の環境の場合、make時に以下のようなエラーでビルドに失敗してしまうためXcode 3を使用する。*1

Please install the 10.5 SDK on this machine at /Developer/SDKs/MacOSX10.5.sdk
external/qemu/Makefile.android:81: *** Aborting the build..  Stop.

Xcode 3のインストールだが、Xcode 3をダウンロードしてそのままFinderからmpkgを実行しても、Lionの場合、Xcode Toolsetがスキップになってしまいインストールできないので、以下のようにする必要がある。

export COMMAND_LINE_INSTALL=1
open /Volumes/Xcode\ and\ iOS\ SDK/Xcode\ and\ iOS\ SDK.mpkg

インストーラが起動するので、インストールの種類で
iOS SDK以外がすべてチェックされている状態にして*2インストールする。

2.ディスクイメージの作成、マウント

大文字小文字を区別するファイルシステムが必要になるため、ディスクイメージを作成する。
アプリケーション > ユーティリティ > ディスクユーティリティを起動し、新規イメージを作成する。
内容は以下の通りとする。

名前 android(任意)
場所 ホームディレクトリ(任意)
ボリューム名 android(任意)
ボリュームサイズ 公式ドキュメントの記載は25GB以上だが、Android 3.2のSDKのビルドのみであれば20GB以上で足りた。
ボリュームフォーマット Mac OS拡張(大文字/小文字を区別、ジャーナリング)
暗号化 なし
パーティション 単一パーティション - Appleパーティションマップ
イメージフォーマット 読み出し/書き込みディスクイメージ

作成後、マウントする。

sudo hdiutil attach ~/android.dmg  -mountpoint /Volumes/android

3.gitのインストール

http://code.google.com/p/git-osx-installer/downloads/list?can=3
からインストーラをダウンロードして、インストールする。

4.Homebrewのインストール

公式ドキュメントでは、MacPortsが使われているが、今はHomebrewの方が流行っていると思うので、Homebrewを使用した。インストール方法は以下の通り。

ruby -e "$(curl -fsSLk https://gist.github.com/raw/323731/install_homebrew.rb)"

5.gnupgのインストール

brew install gnupg

6.repoのインストール

mkdir ~/bin
PATH=~/bin:$PATH
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo

7.オープンファイルディスクリプタの上限変更

vi ~/.bash_profile

以下を設定する。

ulimit -S -n 1024

読み込み。

. ~/.bash_profile

8.ソースコードの取得

cd /Volumes/android
mkdir src
cd src
repo init -u https://android.googlesource.com/platform/manifest -b master -m base-for-3.2-gpl.xml

※最新のバージョンを取得する場合は、

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

とする。特定のバージョンを取得する場合は

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

のようにタグを指定する。*3
ただし、Honeycombのみマニフェストファイルが異なるため、上記のように、-mでマニフェストファイルを指定する必要がある。
なお、マニフェストファイルは/Volumes/android/src/.repo/manifests/に格納される。

repo init実行後は、対象バージョンのソースコードの取得を行う。

repo sync

大量(10GB以上)にダウンロードされるため、回線速度によっては非常に時間がかかる。

9.SDKのビルド

. build/envsetup.sh
lunch sdk-eng
make -j4 sdk

※4はマシンのCPUコア/スレッド数に合わせる。


ビルドが終わると、以下にSDKのZIPアーカイブが出力されている。
/Volumes/android/src/out/host/darwin-x86/sdk/android-sdk_eng.ユーザ名_mac-x86.zip

なお、各種SDKのjarファイルは、/Volumes/android/src/out/target/common/obj/JAVA_LIBRARIES 以下に出力されている。

*1:Xcode 4を先にインストールしていたため、Xcode 3と4のインストール先ディレクトリを、それぞれ/Developer3と/Developerとして共存させた上で、/Developer3/SDKs/MacOSX10.4u.sdkと/Developer3/SDKs/MacOSX10.5.sdkを/Developerへシンボリックリンクをはり、さらにexport CC=/Developer3/usr/bin/llvm-gcc-4.2としてビルドを試みたが、同じエラーになったため、諦めてXcode 3と4をアンインストール後、Xcode 3のみを再インストールした。

*2:iOS SDKが不要だったため。iOS関連の開発を行う場合はiOS SDKにもチェックすればよい。

*3:2012/1/15 追記。-b android-sdk-4.0.3_r1で取得したソースコードを上記と同じ手順でビルドしようとしてもエラーになってmakeできませんでした。