Androidは自分でエミュレーターからコンパイルしよう
こんにちは。WEBチームの[twitter:@k2w4t4h]です。
「(中略)皆さん、Androidは最悪ソースから追えるようになっておいてください。」
という業務連絡が回ってきました。
Androidチーム忙しそうだもんねー。他からヘルプが欲しいご様子。
未発表の機種にエミュレーターをできるだけ近づけるとか、何かと自分でコンパイルできると便利なのかな。
ガラパゴスのアルバイトは、
- Ubuntuのkernelいじってたらサスペンドが効かなくなっちゃたんだよねー。
- MP3プレイヤーにオープンソースのファームウェア入れたらoggも再生できるようになったよー。
- ルーターにオープンソースのファームウェア入れてOpenVPNに対応した。
ぐらいはみんな個人的によくやっているですが、さすがに全員がAndroidをソースからビルドしたことがあるわけでもないですし、アルバイトの新人などはいきなり言われると少し驚くような気もするので、社内メモを兼ねてUbuntu11.04上でAndroid 2.3をコンパイルする方法をブログにしておきます。
はじめに
という中途半端な仕様である、ということを頭の片隅に置いておいていただけると、わかりやすいかと思います。
Ubuntu11.04のデスクトップ版のAMD64版をクリーンインストールした状態を前提に話を進めます。
ライブラリのインストール
SynapticのSetting→Repository→Other SoftwareでCanonical Partnersのコードも受け入れられるようにします。
Synapticでそのままやるなら、一旦リロードします。
以下のパッケージを入れます
git-core
flex
bison
gperf
curl
zlib1g-dev
gcc-multilib
g++-multilib
lib32ncurses5-dev
x11proto-core-dev
libx11-dev
lib32readline5-dev
lib32z1-dev
sun-java6-jdk
ia32-sun-java6-bin
Androidのソースコードの取得
Repoというgitのツールをセットアップします。
mkdir ~/bin
export PATH=~/bin:$PATH
cd ~/bin
curl http://android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo
コードを取得します。
mkdir ~/mydroid
cd ~/mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync
かなり時間がかかります。
コンパイル
えいやっ!
cd ~/mydroid
make
メモリがたくさんあるなら、makeに-j8ぐらいのオプションをつけてあげると早く終わるかもしれません。
参考までに、手元のVMware上のメモリ8GB割り当てた仮想マシンでは15分ほどで終わりました。
起動してみよう
さっそく起動してみましょう。やたらとたくさんオプションがいります。
cd ~/mydroid/out/host/linux-x86/bin
./emulator -sysdir ~/mydroid/out/target/product/generic -kernel ~/mydroid/prebuilt/android-arm/kernel/kernel-qemu -data ~/mydroid/out/target/product/generic/userdata.img -noaudio -skindir ~/mydroid/development/emulator/skins -skin HVGA
しかし、オプションを見ればわかるように、この方法だと、Androidのカーネルはバイナリ配布されているものを利用しています。