Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

Android/Emulator

Androidエミュレータについて

リンク

6.8 Android エミュレータ

何をエミュレートするものか

Android用の開発プログラムは実機を用いることなくエミュレータ上で実行することができるのだが、このエミュレータなるものは、単にJavaコードを実行するのではなく、実機のCPUをエミュレートするものであるらしい。

つまり、実機のCPUがARMプロセッサであるならば、そのARMプロセッサ自体の動作をエミュレートし、その上にDalvik-VMを動作させ、その上で開発コード(Javaのコンパイル済みクラスをまとめたapkファイル)を実行するようだ。

このCPUエミュレーションには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用

エミュレータコンソール

コンソールについては冒頭リンクのエミュレータコンソールの使用を参照。

単純に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

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を押す。「閉じろ」と言われた場合も同じ。