非常に重い標準エミュを捨て、Android4.0 for x86でICSを快適体験(11/22追記)
Android4.0のソースコードが公開されたので早速ビルドしてみた。
あまり話題になっていないが、今回のリリースでx86向けのソースコード*1も提供されている。
標準エミュはarm向けバイナリなので非常に重い。
今回はx86向けにビルドし、virtualboxで快適に使えるAndroid4.0環境を構築してみる。
(11/25追記)
自前ビルドが面倒な人向けに、ビルド済みバイナリの提供を開始。
こちらからどうぞ。
このブログを見て作業する場合、先に記事末尾の諸注意を熟読すること。
できること
- Android4.0を(そこそこ)快適に実行
- マウスのサポート
- ネットワークアクセス
- (11/23追記)adbの接続
以下ビルド手順の解説。
ビルド環境
推奨環境はUbuntu10.04(64bit)。メモリは多ければ多いほどよい。
Windows/MacユーザーはVirtualbox上で構わない。
環境構築
AOSPのInitializing a Build Environmentを参考に環境を整える。
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
$ 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 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils
ソースコードの取得
Downloading the Source Treeにある通り
$ mkdir ~/bin $ PATH=~/bin:$PATH $curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo $ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 # 最近はgoogleのサーバーが重いため、成功するまで何度か繰り返す必要がある $ repo sync -j2
としてソースコードを取得。時間がかかるため食事の合間などに。
ビルド
# 以下の操作はbash推奨 # zshだと一部機能が無効になる模様 $ . build/envsetup.sh $ lunch vbox_x86-eng # 6時間ほどかかる $ make -j4 # (11/25追記) # ネットワークを有効化するため、DNSを設定する $ echo "net.eth0.dns1=8.8.8.8" >> out/target/product/vbox_x86/root/default.prop $ echo "net.dns1=8.8.8.8" >> out/target/product/vbox_x86/root/default.prop $ make # インストーラーのディスクイメージを作成 $ make installer_vdi # (11/22追記) # make android_disk_vdiで、直接実行可能なディスクイメージを得るが # 容量不足に陥りやすく、安定しない
makeは恐ろしく時間がかかるので、寝ている間に。
処理が終わると、/out/target/product/vbox_x86/installer.vdiというvirtualbox用のディスクイメージが得られる。
また、PCにAndroidOSを導入したい場合や普通のarm向けバイナリが欲しい場合は、引数なしでlunchを実行して、欲しいバージョンの番号を打てばよい。
$ lunch Lunch menu... pick a combo: 1. full-eng(標準エミュ用) 2. full_x86-eng(x86用) 3. vbox_x86-eng(x86 virtualbox用) 4. full_maguro-userdebug(GalaxyNexus用) 5. full_tuna-userdebug(?) 6. full_panda-eng(pandaboard用) Which would you like? [full-eng]
Virtualboxの設定
Virtualboxの設定は、以下の点を注意すればよい
- プロセッサのPAE/NX拡張を有効にする
- ネットワークはブリッジアダプタ
ストレージは
を設定する。新規イメージは2GBの容量で十分だろう。
(11/25追記)新規イメージのサイズが1GBだと、容量不足でインストールに失敗する。
2GB以上推奨。
インストール
インストーラーは/dev/sdbになるので、普通に起動すると呼ばれない。
ccacheを使ったリビルドの高速化と、android_disk_vdiのビルドを参考に、以下の手順でインストールを実行する。
- 仮想マシン起動後、即座にF12キーを押してVirtualboxのブートメニューを表示させる
- 2のprimary slaveを選択
- Android Install to /dev/sda from /dev/sdb を選択
- 1度目のインストールは途中で止まる。仮想マシンを再起動し、手順1〜3を再び行う
- インストールが完了したら、仮想マシンを閉じる
これで、/dev/sdaにAndroid4.0がインストールされる。
後は普通に仮想マシンを立ち上げればよい。長い時間お疲れ様でした。
ビルド時間
ビルドに使ったのは、Virtualbox上の以下の環境
- Ubuntu10.04(64bit)
- Intel Corei5 750(4コア)
- メモリ8GB
ホストマシンは
上記環境で、make -j4でのコンパイル時間はちょうど6時間。
実行
動作は非常に快適。5秒で起動し、実機に近い速度で動作する。
残念ながらネットワーク周りが不完全でブラウザが利用できないが*2その他の機能は十分に試すことができる。
Virtualboxのネットワーク設定をブリッジアダプタに設定することにより、ネットワークも正常に動作する。
諸注意
ネットワークアクセス
現在は上手くいかない模様。
(11/22追記)
Virtualboxのネットワーク設定をブリッジアダプタにすることで
ネットワークアクセスが可能になります。
(11/25追記)
標準ではDNSが設定されていない(or設定が正しくない)。
そこで、make後に生成されるout/target/product/vbox_x86/root/default.propに
- net.eth0.dns1=8.8.8.8
- net.dns1=8.8.8.8
を書き加えればいい。
このブログを見ながら作業している場合は、すでに追記されているはず。
マウスを使うには
そのままコンパイルすると、マウスポインタが表示されない。
このページによると、標準で含まれるLinuxカーネルがPS/2マウスをサポートしないのが原因とのこと。
ICSではビルド時間削減のためにカーネルのソースコードがツリーになく、あらかじめビルドされたバイナリ形式で提供されている。
そのためマウスを有効にするには、適切なソースコードを用意し自らカーネルコンパイルをする必要がある。
# Android用linuxカーネルの取得 # ICS標準のカーネルより古くなってしまうので、トラブルが起こる可能性あり $ git clone https://android.googlesource.com/kernel/goldfish $ cd goldfish $ git checkout origin/android-goldfish-2.6.29 # virtualbox用configファイルのコピー $ cp arch/x86/configs/vbox_defconfig .config # PS/2有効化 # 以下のコマンドを実行後 # Device Drivers -> Input Device support -> Miceを有効化して # Mice内のPS/2マウスを有効にすること $ make ARCH=x86 menuconfig # make $ make ARCH=x86 -j4
そして、goldfish/arch/x86/boot/bzImageとgoldfish/vmlinuxを、元からあるprebuild/android-x86/kernel/kernel-vbox、vmlinux-vboxと差し替えばよい。*3
念のため、元のカーネルイメージのバックアップを取っておくこと。
この作業が終わった後、上記のとおりビルドすると*4、マウスが使えるようになる。
(11/23追記)ADBについて
標準だとターミナルエミュレータがないようなので設定できない?
(11/23追記)
Android側からipアドレスを確認する方法は不明。
ルーターの設定画面等、外部からAndroidに割り振られたipを特定できれば
# 自分の環境でのAndroidのip $ export ADBHOST=192.168.0.2 $ adb kill-server $ adb start-server $ adb devices List of devices attached emulator-5554 device
として、無事adbの接続ができる。
eclipseで開発を行う際は、設定->Android->DDMS内の
Use ADBHOSTをチェックして、先に調べたAndroidのipアドレスを記入しておけばいい
追記履歴
(11/23)
- ADB接続が可能に
- SDカードの設定不明
(11/22)
- installer.vdiを利用する方法に変更
- ネットワークアクセスの有効化
- 動作画面の動画追加
ADB設定がよくわからない
*1:実機用とvirtualbox用の二種類
*2:現在解決策を模索中。情報求む
*3:両方をコピーする必要があるかは未確認
*4:segmentation faultで落ちることがあるが、再びmakeすれば問題ないはず