Revision 7 as of 2010-09-27 06:03:43

Clear message
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
Android Console: type 'help' for a list of commands
OK
adb devices
KO: unknown command, try 'help'
quit


ホストとの接続が切断されました。

C:\Users\ytm>cd \devel

C:\devel>dir
 ドライブ C のボリューム ラベルは SW_Preload です
 ボリューム シリアル番号は 7AD1-D35E です

 C:\devel のディレクトリ

2010/09/25  01:33    <DIR>          .
2010/09/25  01:33    <DIR>          ..
2010/09/25  01:43    <DIR>          android-sdk-windows
2010/09/24  23:22    <DIR>          eclipse-3.6
2010/09/27  09:58    <DIR>          eclipse-classic-3.5-android
2010/09/24  23:51    <DIR>          ework2
2010/07/28  22:33    <DIR>          maven2
2010/05/12  12:06    <DIR>          mockito-1.8.4
2010/09/09  21:56    <DIR>          netbeans
2010/09/09  21:38    <DIR>          scala
2010/07/25  10:32    <DIR>          swingx-1.6-src
2010/08/29  11:12    <DIR>          tools
2010/09/26  12:21    <DIR>          workspace-android
2010/08/29  18:17    <DIR>          workspace-gs
2010/09/22  23:59    <DIR>          workspace-mh2
               0 個のファイル                   0 バイト
              15 個のディレクトリ   4,579,631,104 バイトの空き領域

C:\devel>cd android-sdk-windows

C:\devel\android-sdk-windows>cd tools

C:\devel\android-sdk-windows\tools>adb devices
List of devices attached
emulator-5554   device


C:\devel\android-sdk-windows\tools>start emulator -avd your_avd

C:\devel\android-sdk-windows\tools>adb devices
List of devices attached
emulator-5554   device
emulator-5556   offline


C:\devel\android-sdk-windows\tools>adb devices
List of devices attached
emulator-5554   device
emulator-5556   offline


C:\devel\android-sdk-windows\tools>adb devices
List of devices attached
emulator-5554   device
emulator-5556   offline


C:\devel\android-sdk-windows\tools>adb shell
error: more than one device and emulator

C:\devel\android-sdk-windows\tools>adb devices
List of devices attached
emulator-5554   device
emulator-5556   device


C:\devel\android-sdk-windows\tools>adb -s emulator-5554 shell
# quit
quit
quit: not found
# exit
exit

C:\devel\android-sdk-windows\tools>adb -s emulator-5555 shell
error: device not found

C:\devel\android-sdk-windows\tools>adb devices
List of devices attached
emulator-5554   device
emulator-5556   device


C:\devel\android-sdk-windows\tools>adb -s emulator-5554 shell
# cd /data/app
cd /data/app
# ls
ls
com.example.android.apis-1.apk
com.example.android.apis-2.apk
com.example.android.wiktionary-2.apk
com.example.android.skeletonapp-1.apk
asdfa.asdfasdf-1.apk
com.example.android.jetboy-2.apk
# adb uninstall com.example.android.skeltonapp-1.zpk
adb uninstall com.example.android.skeltonapp-1.zpk
adb: not found
# uninstall com.example.android.skeltonapp-1.zpk
uninstall com.example.android.skeltonapp-1.zpk
uninstall: not found
# ls -l
ls -l
-rw-r--r-- system   system    2461518 2010-09-25 02:36 com.example.android.apis-
1.apk
-rw-r--r-- system   system    2461518 2010-09-25 03:05 com.example.android.apis-
2.apk
-rw-r--r-- system   system      48626 2010-09-25 07:45 com.example.android.wikti
onary-2.apk
-rw-r--r-- system   system      10363 2010-09-25 07:56 com.example.android.skele
tonapp-1.apk
-rw-r--r-- system   system      12680 2010-09-26 10:47 asdfa.asdfasdf-1.apk
-rw-r--r-- system   system    1566622 2010-09-27 01:02 com.example.android.jetbo
y-2.apk
#

#

#

# uninstall com.example.android.skeltonapp-1.apk
uninstall com.example.android.skeltonapp-1.apk
uninstall: not found
# ls -l
ls -l
-rw-r--r-- system   system    2461518 2010-09-25 02:36 com.example.android.apis-
1.apk
-rw-r--r-- system   system    2461518 2010-09-25 03:05 com.example.android.apis-
2.apk
-rw-r--r-- system   system      48626 2010-09-25 07:45 com.example.android.wikti
onary-2.apk
-rw-r--r-- system   system      10363 2010-09-25 07:56 com.example.android.skele
tonapp-1.apk
-rw-r--r-- system   system      12680 2010-09-26 10:47 asdfa.asdfasdf-1.apk
-rw-r--r-- system   system    1566622 2010-09-27 01:02 com.example.android.jetbo
y-2.apk
# exit
exit

C:\devel\android-sdk-windows\tools>adb -s emulator-5554 shell
error: device not found

C:\devel\android-sdk-windows\tools>start emulator -avd my_avd

C:\devel\android-sdk-windows\tools>adb shell
#

#

#

# 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
#