DigitalOcean に Android x86 Atom エミュレータを飼う
動機
エミュレータの中ではそこそこ実行速度がある Android x86 エミュレータをインターネット上に展開し、CI 基盤として用いたい。
オープンソース向け CI サービスの中には Android のテストに対応していると記載されているものも存在するが、以下の問題が存在する。
-
androidTest
を実行する場合には ARM エミュレータの起動が必須になるので、テストの実行速度が非常に低速 - 画面なしでのエミュレータ実行が求められるので、UI メインの
androidTest
を書く場合に実行状況を確認しにくい - 複数バージョンのエミュレータを展開してのテストができない
- CI サービスの YAML 地獄辛い
なお、実行環境として、仮想化支援機構の存在する時間課金型 VPS である DigitalOcean を利用したい。
- 仮想化支援機構(
/proc/cpuinfo
のvmx
,svm
フラグ)が存在しないサービスでは x86 エミュレータが実行不能 - 常時インスタンスを起動していた場合、コスト面での負担が大きい
- インスタンスを毎回破棄することでクリーンなエミュレータを利用できる
実装
上記をベースに Ubuntu 14.04 LTS 上にエミュレーション環境を構築した。Itamae でプロビジョニングするのでbundle install
してnode.json
を用意してから、下記コマンドを叩けば動く。
$ bundle exec itamae ssh -h host -u user -j node.json recipes.rb
-
DISPLAY
が存在しないので、ウィンドウを有効にしてエミュレータ起動するには Xvfb が必要 - Xvfb, adb server, エミュレータ自体は Supervisor でスピンアップする
- エミュレータ自体をスピンアップする際に Xvfb を待ち合わせないといけないので、ラップしたシェルスクリプトが必要
x11vnc でDISPLAY
にアタッチできるので vnc 接続もできる。
プロビジョンが終わってからインスタンスをシャットダウンしてイメージにしておくと、次回以降の立ち上げが高速化する。
雑感
- 日本国内リージョンがなく最寄りが多分シンガポールなので vnc が結構遅い
- それを抜いても Genymotion の実行速度には勝てない
- まともに動かそうと思ったらメモリ 4G 以上のインスタンス推奨
- つまり常時起動すると月額 4,000 円からかかるので時間課金推奨
Author And Source
この問題について(DigitalOcean に Android x86 Atom エミュレータを飼う), 我々は、より多くの情報をここで見つけました https://qiita.com/Misumi_Rize/items/08128c796302076be2ee著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .