Androidのソースコードをビルドする


先週は「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プラットフォームをカスタマイズして、動作を確認することができますので、
デバッグや評価ボードへのポーティングなど、様々な用途に活用することができるでしょう。

2 Comments