= Androidエミュレータについて = == リンク == [[http://sites.google.com/a/techdoctranslator.com/jp/android/developing/tools/emulator|6.8 Android エミュレータ]] == 何をエミュレートするものか == Android用の開発プログラムは実機を用いることなくエミュレータ上で実行することができるのだが、このエミュレータなるものは、単にJavaコードを実行するのではなく、実機のCPUをエミュレートするものであるらしい。 つまり、実機のCPUがARMプロセッサであるならば、そのARMプロセッサ自体の動作をエミュレートし、その上にDalvik-VMを動作させ、その上で開発コード(Javaのコンパイル済みクラスをまとめたapkファイル)を実行するようだ。 このCPUエミュレーションには[[http://wiki.qemu.org/Index.html|QEMU]]というものが使用されているとのこと。 このように、おそらくx86系とは根本的に命令セットの異なると思われる(よく知らないのだが)ARMプロセッサをx86上で動作させるため、エミュレータの動作には非常にCPUパワーが必要になる。 == 複数のエミュレータを起動する == エミュレータは同時に複数起動することができる(それが何になるのか現在のところ不明)。 まず、Eclipse上で「設定/Android SDK and AVD Manager」を選択し、Virtual Devicesを選択。複数のavdを作成する。 これを仮にmy_avd, your_avdとする。これらのavdはこの画面にも表示されているように「ユーザ名\.android\avd」フォルダに作成される。つまり、SDKインストールディレクトリとは別の場所に作成されている。 他にも作成方法があるらしいがこれが最も簡単。 次に、コマンドプロンプトで「SDKインストールディレクトリ\tools」に移り、 {{{ start emulator -avd my_avd start emulator -avd your_avd }}} などとする。一つのavdについてはただ一つのエミュレータしか動作しないため、 {{{ start emulator -avd my_avd start emulator -avd my_avd }}} としても一つのエミュレータしか起動しない。 エミュレータの使用するポートは5554から2刻みで、この場合は5554と5556になる(エミュレータ画面に表示される)。 つまり、最初のエミュレータは5554,5555ポートを使用し、次は5556,5557を使用する。 == エミュレータの制御 == 最初のエミュレータは、ポート5554と5556の二つのポートを使用するが、これはそれぞれ以下の目的で使用される。 * 5554 エミュレータコンソール * 5555 adb用 === エミュレータコンソール === コンソールについては冒頭リンクの[[http://sites.google.com/a/techdoctranslator.com/jp/android/developing/tools/emulator#console|エミュレータコンソールの使用]]を参照。 単純にtelnetを使用して接続でき、そこで様々なコマンドを発行することができる。 {{{ telnet localhost 5554 }}} これらのコマンドで、実機のハードウェア状態のエミュレートを指示することができる。例えば、 「power ac off」ではAC電源に接続されていない状態(バッテリーでの駆動)にすることができるし、 「power capacity 10」とすればバッテリー残量を10%とすることができる。 エミュレータ上のプログラムがこれらのハードウェア状態に対応しなければならない性質のものである場合、適切に対処することができるかをテストできるというわけ。 === adb === エミュレータコンソールはデバイス自体の「ハードウェア」状態を操作できるものならば、adbの方はソフトウェアをいじることができるものであるらしい。まず第一には、デバイス中のlinuxのシェルを操作することができる。 {{{ adb shell }}} エミュレータが複数ある場合は {{{ adb -s emulator-5554 shell }}} これでlinuxのシェルコマンドを普通に使うことができる。 {{{ # ls -l dr-x------ root root 2010-09-27 06:00 config drwxrwx--- system cache 2010-09-25 00:49 cache lrwxrwxrwx root root 2010-09-27 06:00 sdcard -> /mnt/sdcard drwxr-xr-x root root 2010-09-27 06:00 acct drwxrwxr-x root system 2010-09-27 06:00 mnt lrwxrwxrwx root root 2010-09-27 06:00 d -> /sys/kernel/debug lrwxrwxrwx root root 2010-09-27 06:00 etc -> /system/etc drwxr-xr-x root root 2010-06-30 21:06 system drwxr-xr-x root root 1970-01-01 00:00 sys drwxr-x--- root root 1970-01-01 00:00 sbin dr-xr-xr-x root root 1970-01-01 00:00 proc -rwxr-x--- root root 12995 1970-01-01 00:00 init.rc -rwxr-x--- root root 1677 1970-01-01 00:00 init.goldfish.rc -rwxr-x--- root root 107412 1970-01-01 00:00 init -rw-r--r-- root root 118 1970-01-01 00:00 default.prop drwxrwx--x system system 2010-09-25 03:37 data drwx------ root root 2010-01-28 00:59 root drwxr-xr-x root root 2010-09-27 06:01 dev # }}} == エミュレータでandroidマーケットのアプリを動作させる == === 方法その1 === [[http://android.jpn.org/2010/04/running-android-market-on-emulator.html|Running Android Market on Emulator]]にある通りに行えばよい。マーケットの任意のアプリをインストール・起動することができる。問題が無いわけではないが。。。 === 方法その2 === 上がうまく行かない場合は、以下を試してみる。 * SDKでAndroid1.6レベルの仮想マシンを作成する。仮に「Android1.6」という名前にする * c:\users\ユーザ名\.android\avdの下にandroid1.6avdというフォルダが出来ているのでそこに、以下からダウンロードしたsystem.imgを放りこむ。 [[http://www.4shared.com/get/x6pZm3-W/system.html]] * あとは普通にエミュレータを動作させる。 * 注意:「キーボードを出せ」と言われたら、Ctrl + F11を押す。「閉じろ」と言われた場合も同じ。