前回概要だけだったので今回は早速VS-Droidを触ってみようと思います。
VSDroidのインストール
インストール画面ではこのように表示されました。
Visual Studio 2005 から 2012 まで対応しているようです。またMSBuildを使ったビルドシステムのために VS-Android をインストールできるようになっているようです。ただここでは素のVSDroidを確認したいので、導入しないでおきます。
動作確認
Visual Studio 2012 を起動して結果を確認してみます。
下記に示すように構成が増えていました。また上部のメニュー部分にも VSDROID という項目が見えます。
HelloJni のサンプルをまずインポートしてみようと思います。
「Import Java+native Android project」の構成を選んで実行します。
するとインポート元の Android.mk を指定するように聞かれるので、Android NDKに含まれていた hello-jni(android-ndk-r9b\samples\hello-jni\jni) を開くことにします。
下記のような画面が現れて、各ファイルをread-only にするかどうか選択できます。
ここではチェックを入れずに続行してみました。
最後にソリューションファイル(sln)の保存場所を聞かれるので、そもそも最初の段階で決めて vcxprojが保存される場所に一緒に保存されるようにしました。
てっきりコピーされるかと思ったのですが、Importではあくまでインポート位置のものが使用されるようです。とりあえずここでは気にしないことにして各ファイルを開いてみたのが以下の図になります。
まずはVSDROIDの設定をするために、メニューからVSDROID/Preferences を開きます。
すると下記のような画面が出てきます。
CygwinのパスやJDKのパス、Android SDK,NDKのパス, Antのパスを入力していきます。
このことからわかるように現在の状態では Cygwin,Ant が必要ということですね。
これらの設定が終わったらプロジェクトをビルドしてみます。
error: Target id 'android-3' is not valid. Use 'android.bat list targets' to get the target ids. Error: could not prepare project for build.TestVSDroid-1 - 3 error(s), 0 warning(s)
このようなエラーが発生してしまいました.
TestVSDroid-1のプロジェクトのプロパティを開いて、Common/Target platform で示される項目を編集します。
下記に示すように手元では android-10 と入力して、再度ビルドを実行したところうまくいったようです。
実行&デバッグ
ビルドができたところで実行をテストしてみます。
端末を接続して、プロジェクトの設定から Configuration内の Debug を開き、Debug target device で目的のデバイスを選択しておきます。デバイスが1種しかない場合には device を選択しておけば良さそうです。
また、Target 内にある Optimization の項目を No にしておきます。
設定できたらそのまま F5(デバッグ開始) で実行してみます。
すると下記のような画面に遷移しました。また実機上ではプログラムが起動してHello from JNI の文字列が表示されていました。
今度はブレークポイントを仕掛けてみることにします。
Java側では、HelloJniクラスの onCreate に、ネイティブ側では、Java_com_example_hellojni_HelloJni_stringFromJNI 関数に仕掛けておきます。設定はいつものVisualStudioの使用時と変わらない設定で F9 にてブレークポイントを仕掛けました。
これで F5実行 で実行してみます。
上記の図を見てわかるとおり、ネイティブ側のブレークポイントで停止しました。
混在のケースではまだ開発途中ということもあり片方で(この場合ネイティブ側)で止まるようです。
ウォッチで変数の値を見ることはできますし、呼び出し履歴についてもそこそこ見られるようです。
ただ気になった点としては、デバッグの停止で Visual Studio が応答停止する状態になることです。自分の端末(GalaxyS2)の問題なのかもしれませんが・・・。