先週は「Androidのソースコードを入手する」でAndroidのソースコードをGitサーバから取得する方法について紹介しました。今日は取得したソースコードをビルドし、ビルドしたAndroidをエミュレータで起動する方法について紹介します。
※2011/04/27 ビルド補助コマンドについて補足しました!
詳細は続きからどうぞ。
環境構築
AndroidのソースコードのビルドにはUbuntu 10.04以降が推奨されています。また、Android 2.3以降のソースコードのビルドには64bit環境を要求されますのでご注意下さい。
では、Ubuntu 10.04 64bit環境上に以下のようにしてコマンドをインストールしましょう。これらのコマンドはAndroidソースコードのビルドに必要となります。
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev ¥
lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
次にJDKをインストールします。
Android 2.3以降のビルドにはJDK 6が必要になります。
$ sudo add-apt-repository “deb http://archive.canonical.com/ lucid partner”
$ sudo add-apt-repository “deb-src http://archive.canonical.com/ubuntu lucid partner”
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
ソースコードのビルド
環境構築が完了したらいよいよソースコードのビルドです。~/mydroid以下にソースコードをダウンロードしていると仮定して、以下の手順でソースコードをビルドします。ビルドが完了するまで長時間かかりますので注意して下さい。
$ cd ~/mydroid
$ make
マルチコアのCPUをお使いの場合はmakeコマンドに-jオプションでスレッド数を指定すると、
ビルド時間を大幅に短縮することができます。スレッド数を4に指定してビルドする場合は以下のようにします。
$ make -j 4
ビルドしたAndroidをエミュレータで起動する
ビルドが完了したら、ビルドしたAndroidをエミュレータで起動してみましょう。
emulatorの引数にはカーネルイメージやramdiskのパスなどを指定します。
$ ~/mydroid/out/host/linux-x86/bin/emulator ¥
-kernel ~/mydroid/prebuilt/android-arm/kernel/kernel-qemu ¥
-system ~/mydroid/out/target/product/generic ¥
-ramdisk ~/mydroid/out/target/product/generic/ramdisk.img ¥
-data ~/mydroid/out/target/product/generic/userdata.img ¥
-skindir ~/mydroid/development/tools/emulator/skins ¥
-skin HVGA
ビルドしたAndroidの端末情報(設定画面→端末情報→ビルド番号)を見ると、ビルドした日時やビルドしたユーザ名が表示されています。
ビルド補助コマンド
Androidのソースコードをビルド/調査する際に非常に便利な補助コマンドが
build/envsetup.shに定義されています。
以下のようにして補助コマンドが定義されているbuild/envsetup.shをロードします。
$ cd ~/mydroid
$ source build/envsetup.sh
build/envsetup.shを読み込むことで利用できるようになるコマンドは
主に以下のようなものがあります。
mコマンド | トップディレクトリからビルドを開始する |
mmコマンド | カレントディレクトリのモジュールをビルドする |
mmmコマンド | 指定したディレクトリのモジュールをビルドする |
crootコマンド | トップディレクトリに移動する |
cgrepコマンド | C言語のソースコードをgrepする |
jgrepコマンド | Javaのソースコードをgrepする |
resgrepコマンド | xmlファイルをgrepする |
このほかに便利なコマンドとして、ビルドターゲットの指定が行えるlunchコマンドが用意されています。
以下の例ではビルドターゲットにgeneric-engを指定しています。
$ lunch
You’re building on Linux
Lunch menu… pick a combo:
1. generic-eng
2. simulator
3. full_dream-userdebug
4. full_passion-userdebug
5. full_sapphire-userdebug
Which would you like? [generic-eng] 1
========================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.3
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
========================================
これらの補助コマンドをうまく活用することで効率的にAndroidソースコードのビルド/解析が行えます。
まとめ
このように、Androidのソースコードを自前でビルドすることは特別難しいことはありません。
自由にAndroidプラットフォームをカスタマイズして、動作を確認することができますので、
デバッグや評価ボードへのポーティングなど、様々な用途に活用することができるでしょう。