Android プログラミング(2) – エミュレータ試行錯誤
シリーズとして、下記の書籍にて学習したことについてのメモを綴っています。
今回は、「HACK#4 エミュレータ入門」および「HACK#5 エミュレータ Hacks」(p.23~41) の内容について触れていきます。
AVD の作成
当面はコマンドラインからの作成が役に立ちそうなケースが思い浮かばなかったので、とりあえず AVD Manager にて作成する方法のみ押さえました。
作成の際に操作するダイアログの内容は、あとで AVD を編集するときに用いるダイアログとほとんど変わらないようです。つまり、ここで指定する内容は後で変更が可能である、かのように見えるのですが、実際に後で OS のバージョンや skin の大きさを変えたりすると、起動できなくなっちゃって、設定を戻しても起動できなくなっちゃって、結局 AVD イメージを捨てる羽目になった、ということがあったので、注意が必要そうです…。
もっとも、 AVD を捨てて作り直すのにそれほど時間は掛からないので、その辺は気軽に割り切ってやっちゃっても良さそうですが…。
SD Card は指定した容量とモロに同じ大きさのイメージファイルを作ってしまうので、テストに応じた最小限の容量に抑えるべきですね。ていうか圧縮ぐらいしてくれ…。
作成の際に設定項目「Snapshot」というのがあります。本書には説明がありませんでした。これはエミュレータの状態をスナップショットとして保存し、次回起動時に利用するという機能のようです (こちらのサイトが参考になりました…)。ただ、実際使ってみたのですが、私の環境では終了に時間がかかる割には起動が速くなるイメージがなかったので、それほどありがたみを感じていません…。
エミュレータを起動
これも AVD Manager からの起動のみ押さえました。 Eclipse からの起動は、とりあえず何か作ってみてからでいいかなぁと…。
エミュレータを操作
…また、キーボードショートカットの詳細については「Android デベロッパーズガイド」を参照してください。
何という丸投げ… (-_-;
とりあえずこの辺を眺めておけばよさげです…。
SD カード
AVD 作成時か起動時の話なので、 AVD Manager で設定できる以上、特に知ることもないかなと…。この後のエミュレータコンソールから SD カードの着脱が出来ると面白いんですが、そもそも Android の仕様的に電源が入った状態で SD カードを着脱するっていうことはあり得ないのかな…。
ネットワーク構成
ここは何かしらのアプリを作ったときでないと役に立たない情報なので、出来るよ、ということを知っておくにとどめて読み飛ばしました。
DNS 設定、プロキシ設定
この辺も予備知識程度ですね。
エミュレータコンソール
勢い勇んで Tera Term とか入れてみたんですが、何故か繋がらなかった… 結局いつも使ってる PuTTY ごった煮版で接続。何故か最初のコマンドは必ず失敗するんですが、それ以外は特に問題なく使えます。
Cygwin の telnet でも ok でした。そもそも日本語は通じないっぽいので、横幅 80桁固定が嫌じゃなければ Cygwin でも全く問題無さそうです。
ポートリダイレクト
これも予備知識ですね。読んでて一瞬 GDB って何だっけとか思ってしまった辺りに自分の経験値の低さを実感せざるを得ません… orz
位置情報の設定
これ、試してみたかったのですが、 geo
コマンド発行後に、エミュレータ上の Web ブラウザで Google プレースに接続し、現在位置を認識しようとすると、何故かエミュレータ内で core dump してしまうようです…。自作アプリとかならうまく値が取れるようになるんでしょうか…?
ハードウェアイベント
テキストエディタで大量に event send
コマンドを書きまくって、それをコンソール上で一気にコピペしてあげたりすると、オートパイロット的に動かせてなかなか便利です。タッチパネル操作もこれでできるんであれば、こいつで結合テストの自動テスト化は概ね完結できそうですね。
但し、私の環境では重い処理になる上に Windows 自体がブルーバックを起こしやすいため、非常にリスキーな処理になってしまいますが… orz
テキストを一気に…
event text
コマンドでテキストを一気に入力できる、とあるのですが、私の環境だと (PuTTY でも Cygwin telnet でも) 確実にエミュレータがアプリケーションエラーを起こして強制終了してしまいます (エミュレータ内で core dump ではなくて、エミュレータ自体がこける) …。
ちなみに、ヘルプを見ると「メッセージは UTF-8 じゃないと駄目だよ」みたいなことが書いてあったので、 UTF-8 であれば日本語もいけるのかと PuTTY 経由で試してみたのですが、この場合今度は強制終了すらせずにハングアップして (応答がないままうんともすんとも言わない状態になって) しまいます…。はっきり言って使い物になりません orz
電源状態を制御
power status
コマンドは、 not-charging
の他に、 unknown
, charging
, discharging
, full
が指定できます。それぞれ、不明 (電池アイコンが「?」になる)、充電中、充電してない、充電完了、と動作します (discharging
と not-charging
の違いがよく分かりませんが…)。
充電されている量は power capacity (百分率)
で指定できるようですね。残り電池容量に応じて動作を切り替えるようなアプリを作った際には役に立ちそうです。
ネットワーク状態、遅延・スピード設定
network speed full
したときの network status
の結果が 0 bits/s
って表示されるのはいかがなものかと…
遅いスピードや遅延を設定すると、その分ちゃんと Web アクセスが重くなる辺りは、よくできてるなぁと思います。
電話の状態
gsm
コマンドで、架空の電話番号から電話が掛かってきたり切られたり保留されたりするのをシミュレートできます。アプリ実行中に電話が掛かってきた、みたいなテストをしたいときに有効ですね。
コンソールから SMS
日本語は入力できるんですが、おもいっきり文字化けします…。
エミュレータの大きさ
エミュレータを実行中に大きさを変えられるのは有意義ではあるんですが、それを出来るようにするんだったらそもそもエミュレータウィンドウ自体のリサイズをマウス操作でできるようにしておいてよと突っ込みたくなるのは私だけでしょうか…。
スキン変更
そんなおしゃれ必要なの? とか思ってたらどうやら画面サイズのことだったようでなんとも… AVD Manager で AVD イメージ作成時に指定するものなのでここもスルーですね。
エミュレータ間通信
ポートリダイレクトを利用してエミュレータ間で通信できるよ、というお話でした。そもそも独自の通信機能を持ったアプリを作った時じゃないと役に立たないお話です。予備知識として押さえておくにとどめましょう。
エミュレータ間で電話やSMS
電話は特に問題ないのですが…
やっぱり日本語は文字化けしてしまうようです orz
この辺、ロケールを日本語に設定しても改善されないので、エミュレータの仕様だと思って諦めるしか無さそうです… ていうか実機では実際ちゃんと動いてるのかなぁ…。
今回は以上です。
2011 年 9 月 10 日 by 村山 俊之
タグ: Android
2011 年 9 月 25 日 6:11 PM
[...] adb コマンドを単に実行すると、 shell 以外のサブコマンドの説明も含むヘルプが表示されます。それを読むとわかるのですが、 shell サブコマンドからアクセスできるシェルというのは、エミュレータを弄る回で扱ったエミュレータコンソールとは別物です。ちなみに、エミュレータコンソールのコマンドも adb コマンドの emu サブコマンドから実行できるようです。 [...]