Genymotion VD for AWS を少し触ったのでメモとして残しておきます。
Genymotion とは
Genymotionとは、Androidの非公式エミュレータの一種です。 その昔Androidの公式エミュレータが遅かった時代に流行しましたが、いまはx86仮想化を利用した高速な公式エミュレータがあるので若干人気が落ちてきた印象です。 一応、公式エミュレータにくらべて実機に近いテンプレートや録画などのサポートツールが充実しているという利点があります。
Genymotion VD for AWS とは
Genymotionの仮想デバイスをec2インスタンスで動作可能にしたものです。 公式のx86/x64エミュレータはIntel HAXMやKVMがないと動作しないため、これまでAndroidエミュレータはec2環境で動かすことが難しい状態でした。 (ARM版エミュレータは動作させられますが起動も動作もかなり遅く、テスト環境としてはあまり安定していません) Genymotion VD for AWSを利用することで(独立したインスタンスにはなりますが)ec2環境でAndroidを動作させることが可能になるため、様々なメリットがあります(後述)。
導入準備
動画付きの導入説明が非常に充実しているので、動画を見ながらやれば簡単にインスタンスを作成できます。 (AWSのコンソールが若干見た目がかわってますが類推できる範囲だと思います) また、チュートリアルにadb接続のやり方や解像度の変更方法も書いてあります。
以下、試したときの導入手順+メモを書き出してみます。
1. GenymotionのEC2インスタンスを用意する
CIのテスト端末向けとしては m4.large が良いようです
2. 作成したGenymotionインスタンスのadb接続を有効にする
$ssh -i key.pem root@instance_ip (ssh接続成功後) $setprop persist.sys.usb.config adb
key.pem はインスタンス作る時に指定した keypare のものを利用します。
instance_ip は ec2-hogehoge.compute.amazonaws.com
みたいなやつ(PublicDNS)を利用します。
3. 作成したGenymotionインスタンスとadbで接続する
直接接続すると危ないのでsshポートフォワードで特定ポートを繋ぐことが推奨されています。
$ssh -i key.pem -NL 5555:localhost:5555 root@instance_ip
うまく行けば上記手順でつながるのであとはadb経由でなんでもできます
もし問題が起きたり、端末設定変更のために画面を確認したいときは https://instance_ip
を直接開くとデバイス画面にアクセスできます。
認証プロンプトが表示されますが、 genymotion/instanceId(AWSコンソールから見れるやつ) でログインできます。
おそらくインスタンスサイズによると思いますが、 m4.large では画面からの操作は若干もたつく感じでした。
メリット
- スケーラブル(インスタンス数・インスタンスサイズ)
- 言語や画面サイズをあらかじめ設定しておける(スナップショット)
- 公式のARMエミュレータと比べて圧倒的に早い
- AWS Device Farm などのプールされた実機をレンタルするサービスと違って接続待ち時間などが発生しない
デメリット
- apkの転送に少し時間がかかる
- Google API を使おうとすると Google Apps を入れる必要があるが、Google規約的に良いのか未確認
- 一応やり方はチュートリアルに書いてあるんですが…
- 維持しておくだけでもお金がかかる(m4.large で 1台につき $0.929/hour)
- (今のところ)Android 6.0/5.1のイメージしか選べない
まとめ
使ってみるまではインスタンスの管理は Genymotion 側でやっていてそれを時間単位でレンタルできるだけなのかなと思っていたのですが、Genymotion 仮想デバイス自体のインスタンスを自前で管理できるので使い方を細かくコントロールできて良さそうな気がしました。 短時間ならかなり低価格で気軽に試せるので、CI環境に実機を使っていて並列度を上げたいがスケールが難しい、仕方なくARMエミュレータを使っているが遅い…という部分で悩んでいる方はちょっとだけ使ってみると良いかなと思います。