Visual Studio 2013 + Hyper-V で Xamarin.Android を動かそう

Visual Studio 2015 preview を使って Hyper-V で Xamarin.Android を動かそう | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/6648

では、Visual Studio 2015 preview で Hyper-V の Android エミュレータを動かす方法を紹介しましたが、もう少し頑張ると現状の Visual Stuido 2013 からも Android エミュレータを動かすことができます。

注)動かせるのは動かせるのですが、Visual Studio からデバッグモードで動かすことはできなくて、何故か Release モードでデプロイした後に、エミュレータ上でアプリを起動できる、ってところまでです。デバッグ時に「Couldn’t connect to logcat, GetProcessId returned: 0」が出てデバッグ用のコネクションが接続しないのですが、アプリのデプロイは成功している状態になりました。

Visual Studio 2015 Preview をインストールする

Preview 版自体をインストールしない方法を模索してはいるのですが、ちょっと無理そう。ただし、Preview 版であっても 2013 と同居ができるので、この方法を使います(たぶん、2010 や 2012 が入っている状態でも同じだと思います)。

Visual Studio 2015 Downloads
http://www.visualstudio.com/downloads/visual-studio-2015-downloads-vs

  1. 実機 PC に Visual Studio 2015 preview をインストールする。
  2. 実機 PC の Hyper-V を有効にする。
  3. 最初の Xamarin Android プロジェクトを作って、リンク先から XamarinInstaller-VS2015 をダウンロード&インストールする。
  4. Visual Studio 2013 の拡張機能を 2015 へコピーする
    C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Xamarin\ を
    C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common\IDE\Extensions\ にコピーする。インストーラが Visual Studio 2013 のほうにしか拡張機能をコピーしないためです)
  5. C:\Program Files (x86)\NuGet\Visual Studio 2015\NuGet.Tools.vsix を実行して拡張機能を有効にする。
  6. Bussiness アカウントでログインをして、Xamarin Update で Statble に戻す。
  7. Statable に戻すときに、何故か元に戻しすぎてログインができない状態までになるが、慌てずに xamarin.com から XamarinInstaller をダウンロードして、再インストールすれば回復します。
  8. 2015 あるいは 2013 で Xamarin.Forms のプロジェクト( Mobile Apps )を作成する。
  9. Debug 実行をして、一旦、Hyper-V に VS Emulator Android – Phone を作成する。
  10. Debug 実行のままだと、Connect エラーが出るので、一度だけ Release モードで実行する。そうすると、デバッグ用のコネクション( GetProcessId が取れるようになる)が確立されて、以後は Debug モードでも実行できるようになる。

ここまでやると、Visual Studio 2013/2015 で Xamarin.Forms を使ってアプリを作ることができます。

お次は Xamarin.Android でもビルドできるように C:Program Files (x86)MSBuildXamarinAndroidXamarin.Android.Common.targets を修正します。

<Target Name="_ConvertDebuggingFiles"
	Inputs="$(OutDir)$(TargetFileName);$(_IntermediatePdbFile)"
	Outputs="$(OutDir)$(TargetFileName).mdb" 
	DependsOnTargets="_ValidateAndroidPackageProperties">
	<ConvertDebuggingFiles InputFiles="$(OutDir)$(TargetFileName)" />
<!--	<Touch Files="$(OutDir)$(TargetFileName).mdb" />  -->
</Target>

デバッグ用の *.mdb ファイルを探してエラーになっているので、これをコメントアウトします。ファイルはメモ帳などを管理者モードで起動して編集してください(Visual Studio 自体を管理者モードで起動しても ok です)

この状態で、VS 2015 からエミュレータを起動して、VS 2013 を開くと、Target Android Deveice のに Hyper-V のエミュレータが現れます。

image

Debug モードでビルドをすると、デプロイ&デバッグコネクションのエラーになりますが、Release モードにすると正常にデプロイが完了します。ただし、残念なことにデバッグ状態では起動できないので、便利なブレークポイントなどの機能が使えません。まあ、そういう場合は Xamarin Android Player を使うということでよいでしょう。

あと、Hyper-V の Android Emulator は v4.4 が入っているので Xamarin.Android プロジェクトの設定を合わせておきます。

image

それと、Android Options > Advanced を開いてサポートする CPU に x86 を含めてください。Java のサイズとかはいつも通りに設定します(設定しなくても普通は動きます)。

image

単独で VS Emulator Android – Phone を起動する

これで Visual Studio 2013 から Hyper-V の Android Emulator を起動することはできたのですが、最初の起動を 2015 から行わなければいけないというのも変です。なので、単独で Emulator が起動できるようにしましょう。

image

WP8 のエミュレーターを単体起動するためのショートカット – 高橋 忍のブログ – Site Home – MSDN Blogs
http://blogs.msdn.com/b/shintak/archive/2012/11/06/10366015.aspx

実は、Windows Phone のエミュレータを起動する方法と同じです。VS Emulator Android は、

C:\Program Files (x86)\Microsoft Visual Studio Emulator for Android\1.0\XDE.exe

にあるので、実行ファイルを差し換えればよいでしょう。ヘルプ自体は xed.exe /? にすると表示ができます。

[Window Title]
Visual Studio Emulator for Android

[Content]
Emulator version 1.0.41108.1

Usage:
xde [/name vmname] [/vhd vhdpath] [/memsize sizeMB] [/com[1|2] pipeName] [/createDiffDisk diffVhd] [/language lcid] [/video widthXheight] [/diagonalSize screenSize] [/showName] [/noStart] [/snapshot] [/displayName text] [/fastShutdown] [/noALS] [/noFFC] [/noGyro] [/noMag] [/noNFC] [/softButtons] [/camera capability] [/?]

/name vmname: The name of the virtual machine. If you do not provide a name, the default ‘Default Emulator’ is used.

/vhd vhdpath: The path to the VHD for the virtual machine (required if the virtual machine does not exist).

/memsize sizeMB: The amount of RAM in MB that the virtual machine should use. Default: 512

/com[1|2] pipeName: The named pipe that the host uses to communicate with serial ports on the virtual machine.

/createDiffDisk diffVhd: Creates a differencing disk, using the path specified by /vhd as the base. The virtual machine uses diffVhd for its VHD.

/language lcid: The hex language ID to use for the emulator. This ID applies only to the host-side emulator application and not to the guest. Example: /language 040c

/bootlanguage lcid: The hex language ID to use for the emulator. This ID applies only to the guest-side OS and not to the host-side emulator application. Example: /bootlanguage 040c

/video widthXHeight: The initial screen resolution of the emulator application. Example: /video 640×800. Default: 480×800

/diagonalSize screenSize: Specifies the diagonal screen size for the emulator (in inches).

/showName: Displays the name of the virtual machine on the emulator chrome.

/noStart: Exits the program without showing the emulator (after creating or modifying the virtual machine).

/snapshot: Tries to boot to the default snapshot, or create a new snapshot if no snapshots are found.

/displayName text: The text to use for the application window and task bar icon.

/fastShutdown: Turns off the virtual machine without waiting for the OS to gracefully shutdown.

/noALS: Disables the Ambient light sensor.

/noFFC: Disables the Front facing camera.

/noGyro: Disables the Gyroscope.

/noMag: Disables the Magnetometer.

/noNFC: Disables the NFC sensor.

/softButtons: Enables the software buttons. (Not valid for all resolutions.)

/camera capability: Switches the camera to the specified capability mode. Valid capabilities: WP8

/?: Displays this help dialog.

私の環境では、/vhd と /video だけ指定すると動くので、/createDiffDisk しなくても良いかもしれません。

“C:\Program Files (x86)\Microsoft Visual Studio Emulator for Android\1.0\
XDE.exe” /vhd “D:vmVS Emulator Android – PhoneVirtual Hard Disksvsemulator.
phone.android.vhd” /video 480×800

な感じのバッチファイルを動かして起動させます。

image

/video の指定値は C:\Program Files (x86)\Microsoft Visual Studio Emulator for Android\1.0\skins にあるスキンのサイズに合わせれば大丈夫なはずです。それ以外は対応してないと思います。いくつか適当な値を入れてもエラーになってしまうので。

後は、Visual Studio 2013 からデプロイ先を指定すれば ok です。

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