Android エミュレータの system.img を書き換える。
すっかり間があいていましまったけど、最近 Android をいじり始めたのでそれについてメモを再開。
Android エミュレータの /system は adb remount で、書き換えはできるけれども、結局エミュレータを終了すればまた元に戻ってしまう。
毎回 adb remount して、adb push してなんかはしてらんないので、エミュレータの /system の実体である ANDROID_SDK_HOME/platforms/android-1.6/images/system.img を書き換える方法を調べてみた。
そすると、http://discuz-android.blogspot.com/2008/01/customize-google-android-systemimg-for.html にやり方があって、必要なバイナリは http://www.dotphone.org/viewthread.php?tid=32&extra=page%3D1 から取得できるようになっていた。
手順としては以下のような感じになる。
エミュレータの system.img を書き換えたいので、ここでは mkfs.yaffs2.arm.tar.gz をダウンロードして解凍しておく。以降では、mkfs.yaffs2.arm を解凍したディレクトリで作業しているものとする。また、エミュレータの名前は MyAVD としている。
準備として AVD 作成時に SD カードの容量を 128M として作成しておく。
エミュレータを起動し、/system を read/write でリマウントしておく。
$ adb remount
system/bin に mkfs.yaffs2.arm を mkfs.yaffs2 としてアップ。
$ adb push mkfs.yaffs2.arm /system/bin/mkfs.yaffs2
他にも /system に対して書き換えたいことがあればここでしておく。
/system 配下を望む状態にしたら、以下のコマンドでエミュレータの SD カード上に system.img を構築する。
$ adb shell mkfs.yaffs2 /system /sdcard/system.img
system.img が作成できたらこれをローカルディスクに持ってくる。
$ adb pull /sdcard/system.img system.img
エミュレータを終了し、今度は今作成した system.img を指定してエミュレータを起動すればよい。
$ emulator -avd MyAVD -system system.img
これで、/system 配下が先ほど修正した状態になっていれば成功している。