Yuta Watanabe's Blog

開発周りと、その他諸々

Visual Studio と C++ による Android NDK 開発

こんにちは。

マイクロソフトの渡辺です。

Visual Studio 2015 Preview が 先日 2014年11月12日・13日に開催された Microsoft の開発者向けイベント Connect(); にて公開されました。

Visual Studio 2015 Prview では、C++ によるクロスプラットフォーム開発の機能が強化され、Android NDK 使った C++ による Android アプリ開発がサポートされています。Android Native Development Tools  ( Android NDK ) は、C/C++ で Android のライブラリやアプリを開発するためのツールキットです。

また、Android アプリのデバッグに使用する Android エミュレータ、Visual Studio Emulator for Android も公開され、Visual Studio における Android 開発の環境はますます充実してきています。

この記事では、C++ と Visual Studio による Android 開発の概要をご紹介します。

環境を整える

Visual Studio と C++ による Android 開発は、Visual Studio 2015 Preview よりサポートされている機能です。まずは、Visual Studio 2015 Preview をインストールしましょう。

インストール時にいくつかオプションを選択できますが、 "Visual C++ for cross-platform mobile development" にチェックをいれてください。

f:id:yuwata:20141220192415p:plain

Visual Studio 2015 Preview のインストールは 2つのステップに分かれており、後半に Android SDK、Android NDK、Apache Ant、Oracle Java SDK、Visual Studio Emulator for Android といった Android アプリ開発に必要なライブラリやツールがインストールされます ( 念のためインストール対象のチェックがついているかご確認ください )。

f:id:yuwata:20141220192431p:plain

プロジェクト テンプレート

[ ファイル ] メニューから [ 新規作成 ] をポイントし、[ プロジェクト ] をクリックします。表示された "新しいプロジェクト" ダイアログ ボックスの左側にあるツリーから、Visual C++、Cross Platform と選択してください。すると、いくつかのプロジェクトテンプレートが表示されます。

現在、Visual Studio 2015 Preview で行なえる C++ による Android アプリ開発は、NativeActivity を利用したアプリ開発、Dynamic Shared Library および Static Library の開発です。プロジェクトテンプレートとしては以下の 4つが提供されています。

  • Dynamic Shared Library (Cross Platform)
  • Native-Activity Application (Android)
  • Static Library (Cross Platform)
  • Dynamic Shared Library (Android)

Visual Studio での C++ によるクロスプラットフォーム開発では、Windows プラットフォーム向けには Visual C++、Android および iOS 向けには Clang/LLVM を使います。

Native-Activity Application プロジェクトの作成

API Level 9 で追加された NativeActivity を使うと、C/C++ のみで Android アプリを開発することが出来ます。この仕組みは、Unreal Engine 4 等のゲーム開発や、OpenGL によるグラフィックを描写するアプリ等で活用されています。

Visual Studio 2015 Preview では、この NativeActivity を使って C/C++ のみで Android アプリ開発を行うプロジェクトテンプレートとして、「 Native-Activity Application (Android) 」が提供されています。

それでは、さっそく新しくプロジェクトを作成してみます。ここでは、FirstNativeActivity という名前にしました。

f:id:yuwata:20141220194612p:plain

生成された Native-Activity Application (Android) のソリューション ( ここでは、FirstNativeActivity ) には、2つのプロジェクトが含まれています。1つは、FirstNativeActivity.NativeActivity、そしてもう1つは FirstNativeActivity.Packaging です。

f:id:yuwata:20141220194710p:plain

FirstNativeActivity.NativeActivity プロジェクトには、アプリを実装するすべての C/C++ コードが含まれます。

ソリューションエクスプローラー から FirstNativeActivity.NativeActivity を右クリックし、プロパティをクリックします。表示されたプロパティ ページのダイアログ ボックスで、構成プロパティ、全般と選択するとプロジェクトに関する一般的な設定が表示されます。

" プラットフォーム ツールセット "を見ると、Clang 3.4 が指定されていることがわかります。また、ターゲット API レベルもここで変更できます。既定は " KitKat 4.4 - 4.4.4, (android-19) " です。

f:id:yuwata:20141220194832p:plain

そして構成プロパティ、C/C++ を選択すると、ビルド時の様々なオプションを設定できることがわかります。コード生成やプリコンパイル、最適化の設定等がここから簡単に行えます。

もう1つの FirstNativeActivity.Packaging プロジェクトの役割は、FirstNativeActivity.NativeActivity プロジェクトで生成されるダイナミック ライブラリ ( Dynamic Shared Library ) を取り込み、Android アプリ ( .apk パッケージ ) を生成することです。.apk ファイルの生成には、Ant ビルドツールが呼び出されます。

その他、FirstNativeAcitvity.Packaging プロジェクトには、パッケージ化の設定を行うマニフェスト ファイル ( AndroidManifest.xml ) や Ant ビルドの設定ファイル ( build.xml ) が含まれます。

また、Visual Studio 2015 Preview では、Android 固有のコードのインテリセンスもサポートされます。リファクタリングやクイックナビゲーションといった他の C++ コーディング支援機能も同様に利用可能です。

f:id:yuwata:20141220195147p:plain

f:id:yuwata:20141220195157p:plain

f:id:yuwata:20141220195204p:plain

C++ で開発された Android アプリのデバッグ

Visual Studio 2015 Preview では、Android 上で動作している C++ コードのデバッグも、もちろんサポートされます。

f:id:yuwata:20141220200024p:plain

デバッグには、Visual Studio が持つ gbd ベースの Android 向けデバッグエンジンを使います。現在サポートされている Visual Studio のデバッグ機能は下記になります。

デバッグにおける現状の制約は下記2点です。

  • デバッグできるのは Android 4.2 以上 ( Jelly Bean API level 17 )
  • デバッグを停止してもアプリは動作し続ける

また、2014/12/20の時点では下記の Visual Studio における C++ のデバッグ機能はサポートされていません。

C++ によるクロスプラットフォーム開発

C++ のコードは、クロスプラットフォーム開発において様々な画面で再利用、共有することが出来ます。Objective-C, Java, C# から C++ で書かれた共通コードを利用する他、例えば Xamarin のようなクロスプラットフォーム開発環境でも利用することができます。

Visual Studio 2015 Preview では、Android および Windows Phone をターゲットとしたライブラリのプロジェクトテンプレートが用意されています。

f:id:yuwata:20141220210600p:plain

Visual Studio での C++ による iOS アプリ向けライブラリの開発のサポートは  2014/12/20 現在、Comming Soon です。

C++ によるクロスプラットフォーム開発の事例も交えたノウハウについては、Microsoft Office と DropBox の開発チームが CppCon 2014にて紹介しています。Microsoft Office は C++ のコードベースからスタートし現在までクロスプラットフォーム対応してきた流れ、また DropBox は Objective-C, Java での開発から C++ でのクロスプラットフォーム開発に移った立場の内容です。

非常に参考になる、濃い内容ですので、ぜひご覧ください。

このあとは                                   

今回は、Visual Studio と C++ による Android NDK 開発の概要をご紹介しました。まだまだ Preview という状態ですが、個人的には思ったより簡単/快適です。ぜひ一度お試しの上、今後の機能実装についてフィードバックをいただければ幸いです!

関連リソース