VisualStudio2015にXamarinを入れてみる

VisualStudio2015でXamarinによるスマートデバイス開発がC#でできるようになったということで、自分のPCにも開発環境を構築してみようとしました。

で、この環境構築でちょっと躓いた箇所があるので、メモ残しておきます。なお、Xamarin自体のインストールはVisualStudio2015のインストーラからできますので、その後でちょっと躓いたことを書きます。

##１．Android 4.4とHyper-V

Xamarinのインストール直後にVisualStudioを起動して、Androidのテンプレート「Blank App (Android)」を選択してソリューションを作ります。

で、Windows.FormsやASP.NETのソリューションを作るときと同じように、サンプルのプログラム入りのソリューションが作られるのですが、このサンプルソリューションをとりあえずデバッグ実行しようとすると、下図のようなエラーが発生します。

<img width="547" alt="無題.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/0a4788a6-1431-7a92-6c72-ab5d9a9f34c2.png">

メッセージの内容は、Hyper-V Virtual Machine Management serviceをスタートさせる必要があるとのこと。ここで「Windowsの機能の有効化/無効化」ダイアログからHyper-Vの機能の有効化を行えば良いと思いがちなのですが、最新版（現時点で6.0。API 23）のAndroidの開発を行う場合、Hyper-Vの設定をしてはいけません。

最新版のAndroidのエミュレーターはHyper-Vが有効だと使えないようなのです（これは後述します）。

ただ、一応Hyper-Vを有効にする手順を説明します。

下図に示すように、システム設定画面の「アプリと機能」から「プログラムと機能」→「Windowsの機能の有効化または無効化」と辿って、Windowsの機能の有効化または無効化ダイアログを開きます。

<img width="610" alt="無題2.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/f2ca1bd8-2102-a99a-5438-d519c5d8ce88.png">

ここでHyper-Vの項目がツリー上に出るんですが、私の環境（SurfaceBookのWindows10）では、あらかじめチェック印がついていました。なのでインストールされているように見えるのですが、インストールされているのはHyper-Vの中でも一部の機能のみ。Hyper-V Virtual Machine Management serviceはインストールされていません（私の環境だけかもしれません。他の環境ではもしかしたらデフォルトでHyper-Vはすべてアンインストール状態なのかもしれませんね）。

なので、一度このチェックをすべて外してOKボタンを押しPCを再起動。続いて再び上図の画面を開き、今度Hyper-VのチェックをすべてつけてOKボタンを押し、もう一度PCを再起動しました。

すると、スタートメニューに「Hyper-Vマネージャー」というアプリが表示されます。

<img width="146" alt="無題3.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/5e067ecd-4b1b-9636-dec2-0164922eb51f.png">

これをクリックしてHyper-Vマネージャを立ち上げ、仮想マシンのところに表示されている「VS Emulator....」を起動すれば良いと思います。

<img width="526" alt="無題4.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/72e946db-dbc6-78a8-ddf8-ce37134b0028.png">

以上の手順でHyper-Vの準備をした後で実行すると、エミュレーターは起動します。ただ、ここで起動するエミュレーターはAndroidではなくWindows Phoneのものに見えますね。画面中にはAndroidと表示されますが。

で、ここまではいいのですが、このエミュレーター内でサンプルアプリが動きません。

なんでかな？と思って色々調べてみたんですが、どうもAndroidのAPIレベルが低いらしいです。VisualStudio2015の作るサンプルアプリはAPIレベル23以上でないと対応していないみたい。


##２．Android 6.0 API 23のインストール

そこで、AndroidSDKマネージャを起動し、APIレベル23のものをインストール。VisualStudioのツールバー上のAndroidSDKマネージャボタンをクリック（下図参照）。

<img width="542" alt="無題5.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/f445644e-cfcc-4459-fce5-095bba14d5e2.png">

AndroidSDKマネージャが開くので、Android 6.0（API 23）のものを一通りインストールします。それとあともう一つ。SDKマネージャ中の一番下のほうにある「Inten x86 Emulator Accelerator (HAXM installer)」もインストールしてください。Android 6.0のエミュレーターは、これがないと動かないみたいなんです。

選択した項目のインストールがすべて完了したあとに、VisualStudioのソリューションエクスプローラ上にある「Main.axml」を開き、デザイナを表示させてみてください。APIレベル23以上のものがインストールされていれば、デザイナが正常に開くと思います。私の環境では、Xamarinインストール直後の状態ではAPIレベルが低いもののため、このデザイナ画面を開こうとするとエラーメッセージが表示されます。

これでようやくサンプルアプリが起動できると思ったのですが、うまくいきません。

デバッグ実行ボタンのところが、ちゃんとAndroid 6.0、API 23のものになっていることは確認しているのですが、「配置エラー」というメッセージが表示されてしまいます。

このエラーの原因となっているのが、先ほど設定したHyper-Vです。Android 6.0のエミュレーターは、Hyper-Vが有効だと動きません。

試しにAndroid Virtual Device Managerを開き、作成しているAndroid 6.0のエミュレーターを起動させてみても、エラーが発生して起動しません。エミュレーターが起動しないから、プログラムが配置できないので「配置エラー」となってしまっているようです。

<img width="421" alt="無題7.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/187c9ca6-f6c8-a4b7-0543-4c34f262e19f.png">

エラーメッセージを見るとHyper-Vが原因には見えないのですが、Android Studioから開くAVD Managerでは、Hyper-Vを無効にしないと起動できないことを伝えるエラーメッセージが表示されます（すいません、その画面のハードコピーをとり損ねてしまいました）。

<img width="605" alt="無題8.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/4a2d34a5-30e0-fe07-2988-9df237375521.png">

こういうのって、VisualStudio側からも分かるようにして欲しいんですけどねぇ。私の場合、たまたまAndroid Studio入れていたから分かったのですが。

で、Hyper-Vを無効にするには、コマンドプロンプトを管理者として実行し、以下のコマンドを実行します。

　bcdedit /set hypervisorlaunchtype off

これを実行後、念のためPCを再起動し、VisualStudio上からデバッグ実行をしていみると、無事にAndroid 6.0のエミュレーターが起動しました。

<img width="540" alt="無題9.png" src="https://qiita-image-store.s3.amazonaws.com/0/123715/3c6bf8ae-e1e1-4326-eec7-6ce3f7e221f3.png">