VisualStudioでNativeActivityを使ってAPKを作ってみる - ver.00 環境構築編

# はじめに
AndroidNDKを使ったテストアプリを作りたい場合、Visual Studioを使うと簡単に実装することができます。
簡単に手順をまとめていこうと思います。

# 開発環境
- OS：Windows 10
- Visual Studio 2017 Professional

# エミュレーターを使うためにHyper-Vを有効にする
WindowsのHyper-Vを有効にします。
1. コントロールパネルを開きます。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/839d0eca-af5a-7303-beb5-5ab0a4e4017f.png)

2. 「プログラム」->「プログラムと機能」->「Windows の機能の有効化または無効化」を選択します。
![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/abcf6c3f-ee27-c545-4880-226a6cca8180.png)

3. Windows の機能ウィンドウが立ち上がりますため「Hyper-V」内の「Hyper-V プラットフォーム」と「Hyper-V 管理ツール」にチェックを入れ「OK」を押します。
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/23202bb2-9d77-1ca8-a4b8-3a173cb60c18.png)

# 環境構築
さっそく始めていきます。
まずVisual Studio Installerの設定から。

1. Visual Studio Installerを立ち上げ「ワークロード」->「C++ によるモバイル開発」にチェックを入れます。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/75d897f8-dea7-5118-5518-3cac92b29513.png)

2. 「個別のコンポーネント」->「エミュレーター」->「Visual Studio Emulator for Android」にチェックを入れインストールします。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/5bbe77b6-d792-4207-4af4-71926e2d5b67.png)

# プロジェクトの準備
1. Visual Studio 2017を立ち上げ「ファイル(F)」->「プロジェクト(P)...」を選択します。
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/0db39323-6cd5-f395-a8ba-db7d787f3d22.png)

2. 新しいプロジェクトウィンドウが立ち上がるため「Visual C++」->「クロス プラットフォーム」->「Android」->「Native-Activity アプリケーション」を選択し、「名前」欄にプロジェクト名を入力し「OK」を押します。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/1f4cda4c-a8c9-b237-bd65-ff26f32abe7c.png)

3. プロジェクトが立ち上がるため「ソリューション エクスプローラー」->「ソリューション」を選択し、「ビルド(B)」->「ソリューションのビルド(B)」をクリック。ビルドが通ることを確認します。
※もしビルドが通らない場合、環境変数が通っていない可能性がありますので、PCを再起動してもう一度試してみて下さい。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/95c928f4-e020-0852-5f86-4c6add6a400f.png)

# エミュレーターの準備
1. 「ソリューション プラットフォーム」を「x86」選択し、実行ボタンの右の▼をクリックし、「Android 用 Visual Studio エミュレーター...」を選択します。(①～③の順番にクリック)
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/f94feb4f-638d-1031-b352-c76452ab88db.png)

2. Visual Studio Emulator for Androidが立ち上がるのでエミュレーターの実行ボタン（緑色の▶）を選択します。
![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/e08dc59b-9301-e2de-d17f-bf823e100f66.png)

3. エミュレーターが立ち上がることを確認します。
![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/41dc3611-26c4-f838-bcb0-297b470c8113.png)

4. エミュレーターが立ち上がっている状態でVisual Studioを確認すると実行ボタンの(オフライン)だった部分にIPアドレスっぽい物が表示されていることを確認します。
![15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/51bd7a72-163b-b06b-7b6a-ad93ed1a1fe8.png)

これで準備完了です。

# APKを作ってインストール
では、実際にAPKを作ってインストールしてみます。
1. Visual Studio上の実行ボタンの右の▼をクリックし、IPアドレスっぽい物が表示されているエミュレーターを選択し、実行ボタンをクリック。

2. エミュレーター上でアプリが動いていることを確認します。
![16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/3d13c105-5e68-4b7e-9e8d-c3b2a1369e6a.png)

# まとめ
これでNativeActivityを使ったAPKを実行することができました。
ブレークポイントや値のウォッチもできますので、デバッグはかなりしやすいと思います。
Visual Studio上でのAndroidアプリ開発の記事はまだまだ少ないので今後増やしていければと思っています。

# トラブルシューティング
私がこの記事を書くにあたり、躓いたところをまとめました。
皆さんの参考になれば幸いです。

1. Visual Studioの実行ボタンを押すと「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出る場合
Visual Studio Emulator for AndroidやAndroid シミュレーターが立ち上がっていない状態で実行すると発生する場合がありますので、実行してから再度試してみて下さい。

2. エミュレーターの表示が（オフライン）のままになっている。
3. Visual Studioの実行ボタンを押すと「Could not locate the Android Debug Bridge (adb.exe).」ダイアログが出る。
![13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75533/e2a2f788-9b69-1336-8911-11d299648c7e.png)

2、3ともに「Visual Studio Emulator for Android」を入れ直すと解決する可能性があります。
Visual Studio Installerを立ち上げ、「Visual Studio Emulator for Android」のチェックを外し更新。PCを再起動した後、再度チェックを入れてインストールし直してみて下さい。

# 参考サイト
・[[Android] Hyper-Vで使うVisual Studio Emulator for Androidの最初の一歩 - Effectiveさお](http://h-sao.com/blog/2017/07/27/setting-visual-studio-android-emulator-on-hyper-v/)
・[Visual Studio Emulator for Android - Microsoft](https://docs.microsoft.com/ja-jp/visualstudio/cross-platform/visual-studio-emulator-for-android?view=vs-2019)