Mac(Lion, OS 10.7)でAndroid OS(2.3.7_r1)をビルドする

Mac(Lion, OS 10.7)上で、Android OS(2.3.7_r1)をソースコードからビルドする。

Android OSのビルドには、Xcode 3.xが必要だが、Lionは4.xをサポート。

よって、Xcode 3.xのインストールから開始する。(4.x系だと、libSDLのリンクに失敗する

 

1. Xcode 3.2.6のダウンロードとインストール

Appli Developer Connectionに登録(無料)して、Xcode 3.2.6をダウンロードする。

ダウンロードしたxcode_3.2.6_and_ios_sdk_4.3.dmgをFinderからクリックしてインストールを開始すると、Android OSのビルドに必要なXcode Toolsがインストールされない。

よって、上記dmgをダブルクリックしてマウントしてから、以下のコマンドでターミナルからインストールを開始する。

$ exort COMMAND_LINE_INSTALL=1
$ open /Volumes/Xcode and iOS SDK/Xcode and iOS SDK.mpkg → グラフィカルなインストール画面が表示されるまで、10数秒かかるので、大人しく待つ。

上図のように「Xcode Toolset」がインストールされる表示ならOK。

iOS SDKはiPhone系の開発をしないなら不要。

 

2.ビルド用の領域確保

ここからは、公式ドキュメントに記載されている通りに進める。

Macは、大文字小文字を区別しない。一方、Android OSのビルドでは、区別が必要なので、専用の領域(イメージ)をディスクユーティリティを使って作成する。

[ アプリケーション ] – [ ユーティリティ ] – [ ディスクユーティリティ ]

左のペインでは何も選択していない状態で、上部の「新規イメージ」を選択。

サイズは、最低25GB、今後のことを考えれば40GBと公式サイトにあるが、2.3.3ならビルド後も11GB前後なので、アドバイスを無視して、15GBにしてみる。

フォーマットを「Mac OS 拡張(大文字/小文字を区別、ジャーナリング)を選択。

作成した、イメージをマウントするためのコマンドをbashに登録する。

~/.bash_profile

に以下を追記。

function mountAndroid { hdiutil attach ~/Documents/android.dmg -mountpoint /Volumes/android; }

bashに設定を反映して、イメージをマウント。

$ source .bash_profile → .bash_profileを即時反映
$ mountAndroid → /Volumes/androidにマウントされる

 

3. 必要なパッケージをインストール

macports, gmake, libsdl, git-core, gnupgが必要なのでインストールする。

gmakeは、3.82がインストールされるが、不具合があるらしいので、後ほど3.81にダウングレードする。

まずは、各種パッケージをインストール/管理するためのmacportsを、MacPortsの公式サイトからダウンロード後、ダブルクリックしてインストール。

MacPortsを、優先的にターミナルから利用するように、.bash_profileに下記を追記してパスを通す。

export PATH=/opt/local/bin:$PATH

gmake, libsdl, git-core, gnupgのインストール。

$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg

ネットワークの状況にもよるが、30分以上かかることもあり。

gmakeを3.82から3.81に変更

/opt/local/etc/macports/sources.confを開いて、rsync行の上に下記を追記。

file:///Users/Shared/dports

上記ディレクトリを作成、移動してから、gmakeをダウンロードしてインストール

$ mkdir /Users/Shared/dports
$ cd /Users/Shared/dports
$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
$ portindex /Users/Shared/dports
$ sudo port install gmake @3.81

Android OSをビルドするには、Macがデフォルトで開けるファイル数が少な過ぎるので、下記を.bash_profileに追記して、開けるファイル数上限を上げておく。

# set the number of open files to be 1024
ulimit -S -n 1024

 

4. ソースコードのダウンロード

複数のgitリポジトリを管理するツールrepoを使って、ソースコードをダウンロードする。

まずは、repoのインストール。

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

ソースコードをダウンロードするディレクトリの作成。先ほど作ったイメージの配下。

$ mkdir /Volumes/android/2.3.7_r1

2.3.7_r1のソースコードをダウンロードする準備をする。

$ cd /Volumes/andoid/2.3.7_r1
$ repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.7_r1

名前と、メールアドレスを聞かれるので、入力する。

今回は使わないが、最新のソースコードをダウンロードする場合は、以下のコマンド。

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

ダウンロード開始

$ repo sync

数GBあるため、ダウンロード完了までは、15分以上かかることも。

 

5. ビルド

ビルド用の環境設定。

$ source build/envsetup.sh

実行ターゲットをエミュレータ(full)、ビルドタイプをフルデバッグ(eng)に指定する。

$ lunch full-eng

詳細は、公式サイト参照。

ビルド。

オプションjのすぐ後ろには、論理コア数を指定。ビルド時のスレッド数になる。

$ make -j4

Core i7 1.8GHz, RAM 4GBで、1時間弱かかります。

 

6. エミュレータで実行

ビルド工程を通して、emulatorコマンドが使えるようになるので、実行。

$ emulator

完了!

 

7. エミュレータの再起動

ターミナルを一度終了すると、emulator用の環境設定がリセットされるので、手動で設定して起動する。

$ emulator -kernel prebuilt/android-arm/kernel/kernel-qemu -system out/target/product/generic/system.img -data out/target/product/generic/userdata.img -ramdisk out/target/product/generic/ramdisk.img -skin WVGA854

 

■参考

■メモ
エミュレータがエラーで起動しない時は、.bash_profile内のPATHを確認する(android-sdkをインストールしている場合、そちらのemulatorコマンドが優先されている場合がある)。