kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

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 配下が先ほど修正した状態になっていれば成功している。