VisualStudio上でAndroidNDKを使った開発を行う

正直なところAndroidでゲームを作るなら出来る限りJavaなどを使わず、ほぼ全てをNDKを使ってC/C++で書いたほうが効率が良いと思うのです。ただ、NDKで開発する場合はメイクファイルを書かないといけなかったり、cygwinからndk-buildを叩かないといけなかったりと微妙に面倒くさい。

そこで色々調べていると、VisualStudioのMSBuildを使ってVisualStudioでNDKを用いた開発を行うようにできる「vs-andorid」を見つけたので紹介します。

▼vs-android
GitHub - gavinpugh/vs-android: Integrated development of Android NDK C/C++ software with Microsoft Visual Studio.

これを使えばコンパイルからリンク…パッケージファイルの生成までVisualStudio上で行うことができるようになります。また、コンパイル時間についてもNDK標準のndk-buildより早いという特徴もあるので利用を検討するメリットは十分にあるかと思います。
素晴らしいです!Gavin氏ありがとう!

インストールについて

このプロジェクトの「Installation」にしっかりインストール方法を書いてくれているのでそちらを見れば十分かと思いますが、せっかくなのでインストール手順についても説明しておきます。

インストールする前に用意するもの

通常の開発環境も準備しておきましょう。インストール方法などは過去の投稿の「Android SDKのインストール」を参考にすると良いかも知れません。

最新版のNDKをインストールしておきましょう。残念ながらウチではインストール方法の記事を書いていないので、google先生に質問してみてください…いずれウチでも書いときます…。
インストール後は環境変数ANDROID_NDK_ROOTを追加しておきましょう。*1

変数名 ANDROID_NDK_ROOT
変数値 C:\android-ndk-r5b*2

Visual Studio 2010が必要になります…持ってないよ…ってか自分はVS2008しか持ってません…っが、無料で使えるExpress版でも問題なく動作したので心配はありません。
Visual Studio 2010 Expressはこちら「http://www.microsoft.com/japan/msdn/vstudio/express/」からダウンロードできます。ここのVisual C++ 2010 Expressをインストールしておきましょう。インストール後は再起動を求められるのでご注意を。

インストール

では、早速インストールします。
もちろん上述の3つが既にインストールされていることが前提となります。

まずは、プロジェクトサイトのDownloadsから最新版のvs-android-*.zipをダウンロードしてきます(現時点でのバージョンはv0.21)。サンプルプロジェクトである「sanangeles.zip」もアップされているので一緒に落としておくと良いでしょう。

ダウンロードできたら適当な場所に解凍し*3、解凍したフォルダ直下にあるMSBuildフォルダの中の「install.cmd」を実行します。
これだけでvs-android自体のインストールは完了です。

Apache Antについてもあった方が良いらしいのでインストールします。
Apache Ant - Binary Distributions
上記のサイトの「Current Release of Ant」にある最新のパッケージをダウンロードしてきて、適当な場所に解凍します。基本的には全角やスペースを含まない場所であればお好みで問題ありません。ここで配置したパスはあとで使うので覚えておいてください。
また、Javaが必要になるようですがSDKを正しくインストールしてあるなら恐らく問題ないかと思います。

実際に使ってみる

インストールができたら実際にサンプルプロジェクトを使って試してみましょう。サンプルプロジェクトはvs-androidプロジェクトサイトのDownloadsにある「sanangeles.zip」です。これを雛形にしていくと良いのかも知れません。
使い方についても、プロジェクトサイトの方(ここ)でも詳しく解説されています。
ここでの解説も「sanangeles.zip」を使って説明します。

新規プロジェクトの作成

まずは、VisualStudio2010を立ち上げて新しいプロジェクトを作成します。自分はVisualStudio2010を持っていないので、ここではVisual C++ 2010 Expressを用いて手順を説明しています。
新しいプロジェクトは、メニューのファイル>新規作成>プロジェクトから作成できます。
空のプロジェクトを選択し、プロジェクト名をサンプルと同じ「sanangeles」としましょう。場所は各自適用の場所を指定してください。また、「ソリューションのディレクトリを作成」のチェックを忘れずに外しておきましょう。自分はコレを見落としていて少し躓きました。

サンプルプロジェクトをVSのプロジェクトに追加

新規プロジェクトを作成したら、ダウンロードしておいた「sanangeles.zip」を解凍し、中身全てを作成したプロジェクトにコピーしてください。上の例であれば、C:\work\android\sanangelesフォルダに、「sanangeles.zip」内のjniフォルダ、resフォルダ、srcフォルダ、AndroidManifest.xmlbuild.xml、default.properties、local.propertiesをコピーすることになります。
コピーしたら、jniフォルダのソースファイルをプロジェクトに組み込みましょう。

ソリューションプラットフォームを追加

次にAndroidプラットフォーム用の構成を追加します。構成の追加は、ソリューションエクスプローラーのソリューションを右クリック>構成マネージャーから行うことが出来ます。


OpenGLESを使うための設定

サンプルではOpenGLESを使っているので、GLESが静的リンクされるよう設定します。
ソリューションエクスプローラーのプロジェクトを右クリック>プロパティを選択し、プロジェクトのプロパティダイアログを開きます。プロパティダイアログの「構成プロパティ>C/C++プリプロセッサ」を選び、「プリプロセッサの定義」を編集し、「DISABLE_IMPORTGL」してください。

続いてリンカーの設定もしておきます。同じくプロジェクトのプロパティダイアログから「構成プロパティ>リンカー>コマンドライン*4」を選び、「追加オプション」に「-lGLESv1_CM」を追加します。

Ant Buildを設定

次はAnt Buildの設定を行います。
「構成プロパティ>Linker>Android Ant Build」を選び、「Ant Build」の項目を「ant debug」に設定し、「Path to Ant Batch File」に事前に配置しておいたAntのなかにある「ant.bat」へのパスを設定します。

最後に、「local.properties」ファイル内の「sdk.dir」にAndroidSDKのパスを記述してください。「local.properties」は今回作成したプロジェクトファイルと同じフォルダ内にあります。

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked in Version Control Systems,
# as it contains information specific to your local configuration.

# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=C:\\Program Files\\Android\\android-sdk-windows
ビルド

以上でひと通り設定完了です。F7キーを押して実際にビルドしてみましょう。

ビルドが正しく通れば↑のようにBUILD SUCCESSFULと表示され、パッケージが生成されます。
もし「Unable to locate tools.jar」と表示されてビルドに失敗するようであれば、環境変数に「JAVA_HOME」を追加してからリビルドしてみてください。自分の場合、この設定を行わないとエラーが出ました。

変数名 JAVA_HOME
変数値 C:\Program Files\Java\jdk1.6.0_23*5

このエラーについては、下記のブログを参考にさせて貰いました。
takuanのメモ antでUnable to locate tools.jarが出た場合の対処

最後に

それでは、最後に生成されたパッケージを起動してみます。
AndroidSDKのplatform-toolsフォルダ内にあるadb.exeを利用します。
サンプルのプロジェクトの場所*6に、apk-install.batを作成し下記のように記述します。

"%ANDROID_SDK_ROOT%\platform-tools\adb" install -r bin\DemoActivity-debug.apk
"%ANDROID_SDK_ROOT%\platform-tools\adb" shell am start -n com.example.SanAngeles/.DemoActivity

AndroidSDKへのパスは各自違う場合がありますが、ここでは便宜上ANDROID_SDK_ROOTにパスが設定されているとして説明します。それぞれ、各自完了に合わせて書き換えてください。
このバッチファイルをダブルクリックすれば、端末にパッケージがインストールされ、その後アプリが起動します。

おわり

ん〜、こんなところでしょうか?ひとまず、これでVisualStudio上でビルドを行い、バッチファイルを叩くことで端末へのインストール→起動を行うことができます。実際の運用方法だったりは各自検討してみてください。
現状ではVisualStudio上でデバッグできるわけでは無いようですし、Java部分に関しても完全スルーな感じですが、ほぼネイティブコードのみで開発するのであれば、ビルド時間が短くなる、メイクファイルを書く必要がない、もちろんVisualStudio上なのでインテリセンスの恩恵を受けられるなどの利点があるので、活用方法を模索してみると面白いと思います。
また、良い使い方など思いついたなら教えてもらえると嬉しいですね。

*1:マイコンピュータ右クリック>プロパティ>詳細設定タブ>環境変数、から設定できる。

*2:各自の環境で様々です。環境に合わせたものを設定してください。

*3:全角パスや半角スペースを含まない場所にしておいた方が無難かもしれない(未検証)。

*4:Linkerと、リンカーがありますがカタカナのリンカーの方です。

*5:このパスは各自違う可能性があるので、適宜JDKへのパスを設定してください。

*6:sanangeles.vcxprojなどがある場所です。