Xamarin Android Player と Hyper-V を共存させてエミュレータ環境を改善する

Xamarin Android Player | Xamarin
http://developer.xamarin.com/guides/android/getting_started/installation/android-player/
Xamarin Android Player のインストール方法 ( Google Apps & Google Play Services 含む ) – Yuta Watanabe’s Blog
http://yutawatanabe.hatenablog.com/entry/xamarin-android-player-preview-install
Xamarin Android Player 小ネタ – Xamarin 日本語情報
http://ytabuchi.hatenablog.com/entry/2014/10/09/164202

インストール等は、上記の情報を参照して頂くとして、自前の環境で Hyper-V と Xamarin Android Player を同時に動かしています。Xamarin Android Player 自体は、VirtualBox 上で動いているものを OpenGL で描画部分だけ取り出している(っぽい)ので、結論的には Hyper-V と VirtualBox を共存させればよい、ということみたいですね。

ちなみに、Xamarin Andorid Player 自体 ver.0.0.24 というアルファ版っぽいバージョンなので、このあたりは今後改善されるでしょう。OpenGL 経由で表示するので、Hyper-V の仮想環境内やリモートデスクトップでは動きません。OpenGL 対応のリモートツールがあれば動くのかも。

若干パフォーマンスが落ちるらしい

Hyper-V を有効にした状態だと、下のような警告がでます。最初、なかなか先に進まないのでエラーなのかと思ったのですが「警告」です。

image_thumb[1]

Client Hyper-V is enabled on this system; this can result in decreased performance.  For maximum performance, please disable Hyper-V and reboot.

パフォーマンスは落ちるけど、動くよ、ってことなので、そのまま進めます。Windows Phone 8.1 を開発していなかったり、Windows 10 Technical Perview などを試さない場合は、Hyper-V を切っておくとよいでしょう。コントロールパネルで「Windows の機能」で検索して、Hyper-V のチェックを外しておけば ok です。

image_thumb[2]

私の環境では、Windows TP と Windows Phone エミュレータと同時に動いています。

VirtualBox のネットワークを確認する

私が嵌ったのは、ネットワークの問題でした。最初にインストールした状態では、下のようなダイアログがでて起動しなかったんですよね。

image

なにやら、OpenGL のサーバーに繋げているときに、ネットワークが通らない…って話です。VirtualBox を導入したのは初めてなもので、Hyper-V と Xamarin Android Player は共存できないのか?とあきらめました。あれこれ弄ると、下のようなメッセージにもなります。

image_thumb[4]

どうやら、VisualBox 上で動く OpenGL サーバーと Player が通信していることが分かったので、VirtualBox のネットワークを確認してみます。

image_thumb[5]

一発でうまくいく場合は、VirutalBox Host-Only Ethernet Adapter しかないと思います。私の場合は、このホスティングのインストールが失敗したらしく、#3 のようにいくつかのアダプターがつくられています。コントロールパネルで「ネットワーク接続」を開いて IP を調べてみると、こんな風に違いがあります。左がつながらない元のネットワークで、右が「#3」のつながっているほうです。

image_thumb[8] image_thumb[9]

私の場合、以前 VMWare を入れていたので、ローカルネットワーク構築時の IP がややこしくなっているのかなと想像しています。うまく OpenGL サーバーにつながらないときは、この部分を見直してみてください。(10.* なのに、サブネットマスクが 255.255.255.0 ってのもアレですが)。

外部接続は アダプター2 で接続している

Player に OpenGL をホストしている方は「アダプター1」を使っていて、外部ネットワークへ接続する方(Google Play などで必要)は「アダプター2」を使っているようです。私の場合、初期値である割り当てが「NAT」ではうまくつながらなかったので、ブリッジアダプターを使って接続しました。

image_thumb[10]

一度接続した後は、NAT に戻しても接続できるようになっているので、VirtualBox のネットワークの問題ですよね、おそらく。うまく繋がらないときは、このあたりを変更してみましょう。私の環境が QEMU とかを含めてややこしいネットワーク環境になっているため、ってのもありますが。

最初は Xamarin Studio で起動させる

Player への接続ですが、最初は Visual Studio から起動できませんでした。選択肢に Player の KitKat が現れません。これも環境によるのかもしれませんが、

  1. Xamarin Android Player を起動させる。
  2. Xamarin Studio で認識させる。
  3. Visual Studio で Target Android Device に現れる。

という流れで確実に表示できます。

スピード的には HAXM で Android 仮想デバイスを高速化 と同じぐらいのスピードで動いています。Hyper-V を切って、VirtualBox Only で動かせば、結構なスピードがかもしれません。AEDSearch の Azure サービス部分が妙に重たくて Mac のほうを使っていたりしたのですが、これで開発のスピードアップができそう。かなり早く動いてます(なんか、地図のところがエミュレーターでうまく動かないんですよね…)。

カテゴリー: Xamarin パーマリンク