BlueStacks ってのは、Windows や Mac 上の Android エミュレータです。デバッグ用ではなくて、巷の Android ゲームを動かすための仕組みなのですが、これを Xamarin から使ってみます。
Android エミュレータは、Android SDK の高速エミュレータ、使ってますか? | OPTPiX Labs Blog にある Intel Atom (x86) Android エミュレータ を使えばいいんですが、これに必要な「Intel VT」が手元の VMWare と競合してしまうために動きません。まあ、BlueStacks 自体は仮想環境上では動かないので、実機 PC に入れないとダメという制約はあるのですが。後、試してみるとデバッグモードでは動かなくて、リリースモードだけ実行できます。なので、ブレークポイントを置けないので、ログ出力とか何らかの print デバッグをしないとダメっぽいです。素直に実機接続をしたほうがいい、ってのもありますね。
BlueStacks のインストール自体は、日本語Windows 8 Pro で Kindle を動かす方法 | Moonmile Solutions Blog を参考にしてください。
BlueStacks と visual studio + xamarin は同じPCで動作させます。
BlueStacks を起動して、adb devices を実行すると「emulator-5554」が実行された状態になる(このエミュレータ名は異なる可能性あり)
adb tcpip 5555 を実行してポートを開く。
adb connect localhost を実行してポートにつなげる。
adb devices を実行すると「localhost:5555」に接続できる。これが先の「emulator-5554」=bluestakcs .
Target Android Devices を更新するために、Visual Studio を再起動する。すると、エミュレータの「Samsung GT-N7000」が出てくる。モデル名は異なる場合あり?
Android プロジェクトのプロパティで、API バージョンを揃えて置く。最新の BlueStacks は Android 4.0 だそうなので、これにしておく。
デバッグビルドして実行すると、以下のようなエラーが出て実行できない。
Loaded assembly: Mono.Android.dll [External]
02-17 11:49:03.560 V/dalvikvm(27932): +++ not scanning ‘/system/lib/libwebcore.so’ for ‘register’ (wrong CL)
02-17 11:49:03.560 V/dalvikvm(27932): +++ not scanning ‘/system/lib/libmedia_jni.so’ for ‘register’ (wrong CL)
02-17 11:49:03.560 V/dalvikvm(27932): +++ not scanning ‘/system/lib/librs_jni.so’ for ‘register’ (wrong CL)
02-17 11:49:03.560 V/dalvikvm(27932): +++ scanning ‘/data/data/SamplePazzle.Android/lib/libmonodroid.so’ for ‘register’
02-17 11:49:03.560 V/dalvikvm(27932): +++ calling dlsym(Java_mono_android_Runtime_register)
Loaded assembly: System.Core.dll [External]
02-17 11:49:03.560 V/dalvikvm(27932): Found ‘Java_mono_android_Runtime_register’ with dlsym – func=0xab9e7805
Loaded assembly: MonoDroidConstructors [External]
Loaded assembly: System.dll [External]
プログラム ‘Mono’ はコード 0 (0x0) で終了しました。
Couldn’t connect to logcat, GetProcessId returned: 0
よくわからないけど、リリースモードで実行するとうまくいく。
BlueStacks は、こんな風なゲームも動くので、大抵のものなら大丈夫なはずです。ただし、OpenGL(かな?)の調子が悪いらしく私のPCのグラボ上では再描画がちかちかしていますが。
というわけで、かなり制限がありますが、VS2013 + Xamarin + BlueStacks で Android の実行ができます。制約としては、
- BlueStacks は仮想環境(VMWare上)では動かないので、実PCで動かす必要がある。
- Xamarin と BlueStacks は同じPCで動かす必要がある。
- デバッグ実行ができず、リリースモードでの実行のみ可能。
せめて、ログが出ればいいんですけどね。これはあとで調べてみます。