Visual Studio Community 2017 の Androidアプリ開発でのDXライブラリの使い方


 Visual Studio Community 2017 を使用してDXライブラリを使った Androidアプリを製作するには以下のような手順を踏みます。

1.DXライブラリを使うために必要なものを揃える

2.Visual Studio Community 2017 の Android アプリ開発の準備を行う

3.プロジェクトの作成

4.DXライブラリを使用するためのプロジェクトの設定を行う

5.プログラムを組む

6.Androidエミュレーターの準備

7.プロジェクトのビルド、実行



1.DXライブラリを使うために必要なものを揃える

Visual Studio Community 2017 でDXライブラリを使用して Androidアプリを製作するには以下のものが必要です。

    ・Visual Studio Community 2017
    ・DXライブラリ Android版

 まず Visual Studio Community 2017 は、プログラムをコンパイルして実行可能な Androidアプリを作成する為のメインとなるソフトです。
 こちらはマイクロソフトのこちらのページ『Visual Studio 2017 およびその他の製品』 と書かれている項目の『ダウンロード』から無償で入手することができますので、ありがたくダウンロード&インストールさせてもらって下さい。
( ただ、ダウンロードするためには無償サービスの Microsoft Dev Essentials に登録する必要があります )

 二つ目の DXライブラリ Android版は本サイトのこちらのページからダウンロードすることができます。
これがないとDXライブラリを使うことができませんので、まだダウンロードされていない方は
DXライブラリ Android版』をダウンロードしておいてください。



2.Visual Studio Community 2017 の Android アプリ開発の準備を行う

Visual Studio Community 2017 は、標準的なインストールを行っただけでは Android アプリの開発ができないので、
以下の手順を行って Android アプリの開発に必要なファイルをインストールします。

   ① Visual Studio Community 2017 のインストールをするためにダウンロードした実行ファイル
   ( ファイル名は vs_community__2076377474.1459384954.exe など )をダブルクリックをして起動します。

   ( Visual Studio Community 2017 のインストールの際にファイルをダウンロードをせずに直接実行した場合は、
    再度 Visual Studio Community 2017 のダウンロードページ『VS Community 2017 のダウンロード』
    書かれているボタンをクリックしてインストーラーを起動してください )

   ( また、ダウンロードした実行ファイルを起動したら『インストーラーを更新してください』と表示されて、
   『はい』を選んでも再び『インストーラーを更新してください』と表示されてしまった場合も
    再度 Visual Studio Community 2017 のダウンロードページ『VS Community 2017 のダウンロード』
    書かれているボタンをクリックしてインストーラーを起動してください )

   ② インストーラーが起動したら『Visual Studio Community 2017』の項目の『変更』ボタンを押します。

   ③ 上部の『ワークロード』タブを選択した状態で、下の項目から『C++ によるモバイル開発』と、少し下の方にある
     『.NET によるモバイル開発』をクリックして、項目にチェックがついた状態にします。

   ④ 次に上部の『個別のコンポーネント』タブを選択した状態で、下のリストから以下の項目を探してチェックを付けます。

       Android NDK (R12B)
       Android NDK (R13B)
       Android NDK (R15C)

       Android SDK セットアップ (API レベル 19)(javascript / C++ を使用したモバイル開発のためにローカルにインストール)
       Android SDK セットアップ (API レベル 21)(javascript / C++ を使用したモバイル開発のためにローカルにインストール)
       Android SDK セットアップ (API レベル 22)(javascript / C++ を使用したモバイル開発のためにローカルにインストール)
       Android SDK セットアップ (API レベル 23)(グローバル インストール)
       Android SDK セットアップ (API レベル 25)
       Android SDK セットアップ (API レベル 25)(javascript / C++ を使用したモバイル開発のためにローカルにインストール)

       Android SDK セットアップ (API レベル 27)

     上記全ての項目にチェックを付け終わったら、ウインドウの右下にある『変更』ボタンをクリックします。

   ⑤ 必要なファイルのダウンロードとインストールが行われ、完了するとインストーラーの最初の画面に戻るので、×ボタンを押してインストーラーを終了します。

 これで Visual Studio Community 2017 で Android アプリの開発をするためのファイルのインストールは完了です。



3.プロジェクトの作成

 Androidアプリを開発するためのソフトの準備ができましたので、早速一つ簡単な Androidアプリを作ってみましょう。
 ここでは『画面の中心に四角形を表示する』という動作をするアプリを作る手順を記したいと思います。
 Visual Studio Community 2017 で Androidアプリを作るにはまず『プロジェクト』を作成する必要があるので以下にその方法を記します。

   ① Visual Studio Community 2017 のメニューの『ファイル(F)』→
         『新規作成(N)』→『プロジェクト(P)...』を選んで『新しいプロジェクト』ダイアログを表示します。

   ② ダイアログ左側の項目から『インストール済み』→『テンプレート』→
                       『Visual C++』→『クロス プラットフォーム』を選びます。

     もし『Visual C++』や『クロス プラットフォーム』がない場合は、『Visual Studio インストーラーを開く』を
    クリックしてインストーラーを起動して、インストーラーのタブから『ワークロード』を選択すると表示される
    沢山の項目の中から『C++ によるモバイル開発』を選択してからウインドウ右下の『変更』ボタンを押してください、
    Androidアプリアプリ開発に必要な機能がインストールされます。
    ( VisualStudio Community 2017 を起動しているとインストールできないので、
     『変更』ボタンを押す前に VisualStudio Community 2017 は終了させておいてください )
     機能のインストールが完了したら、VisualStudio Community 2017 を起動して、再び
    ①から手順を追ってください。


   ③ ダイアログ左側の項目から『インストール済み』→
                  『Visual C++』→『クロス プラットフォーム』→『Android』を選びます。

   ④ ダイアログ右側の項目から『Native-Activityアプリケーション(Android)』を選びます。

   ⑤ 次にプロジェクトを作成するフォルダパスを『場所(L):』で設定します。

   ⑥ 次にプロジェクトの名前を『名前(N):』に入力します。ここでは仮に『test』とします。

   ⑦ 『ソリューションのディレクトリを作成(D)』にチェックを付けてから『OK』をクリックします。

 これでプロジェクトの作成は完了です。



4.DXライブラリを使用するためのプロジェクトの設定を行う

 早速プログラムを組みたいところですが、作成したプロジェクトでDXライブラリを使用するための設定をする必要があります。
 ちょっと操作の数が多くてうんざりしますが、プロジェクト一つにつき一回だけなので、根気よく手順を追ってください。

  1. 『ソリューションエクスプローラー』と書かれているリストに表示されている
    『(プロジェクト名).NativeActivity(android-19)』を右クリックして、プルダウンメニューから
    『プロパティ(R)』をクリックして『(プロジェクト名).NativeActivity プロパティページ』を表示します。
    ( (プロジェクト名)の部分は、今回は『test』になっている筈です )

  2. 次にダイアログの左上にある『構成(C):』と書かれている項目を『すべての構成』に変更します。

  3. 次にダイアログの左上にある『構成(C):』の右側にある『プラットフォーム(P):』と
    書かれている項目を『ARM』に変更します。

  4. 次に左側のリストから『構成プロパティ』→『C/C++』→『全般』を選びます。

  5. 次に右側に表示されている『追加のインクルード ディレクトリ』の項目にDXライブラリのパッケージ内に
    入っている『Lib_VisualStudio\armeabi-v7a』フォルダのパスを追加してから、
    再度ダイアログ右下にある『適用(A)』ボタンを押します。
    ( 追加するパスは、例えばダウンロードした『DXライブラリAndroid版』のパッケージを Cドライブの直下に展開した場合は
              C:\DxLib_Android\Lib_VisualStudio\armeabi-v7a;
             ( パスの末端に次のパスとの区切りとなるセミコロン『;』も書きます )

      となります。
      尚、DXライブラリをマイドキュメントフォルダに入れるとこれらのパス指定が面倒になりますので
      DXライブラリはなるべく浅いフォルダに入れておくことをお勧めします )

  6. 次に左側のリストから『構成プロパティ』→『リンカー』→『全般』を選びます。

  7. 次に右側に表示されている『追加のライブラリ ディレクトリ』の項目に手順5と全く同じパス( DXライブラリの
    パッケージ内に入っている『Lib_VisualStudio\armeabi-v7a』フォルダのパス )を
    追加してから、再度ダイアログ右下にある『適用(A)』ボタンを押します。

  8. 次にダイアログの上部にある『プラットフォーム(P):』を今度は『x86』に変更して、
    4~7の手順を再度行います、但し、入力するパスは『Lib_VisualStudio\armeabi-v7a』ではなく、
    『Lib_VisualStudio\x86』となります。( armeabi-v7a が x86 になっています )

  9. 次に手順8と同じようにダイアログの上部にある『プラットフォーム(P):』を今度は『ARM64』に変更して、
    4~7の手順を再度行います、但し、入力するパスは『Lib_VisualStudio\armeabi-v7a』ではなく、
    『Lib_VisualStudio\arm64-v8a』となります。( armeabi-v7a が arm64-v8a になっています )

  10. 更に手順8と同じようにダイアログの上部にある『プラットフォーム(P):』を今度は『x64』に変更して、
    4~7の手順を再度行います、但し、入力するパスは『Lib_VisualStudio\armeabi-v7a』ではなく、
    『Lib_VisualStudio\x86_64』となります。( armeabi-v7a が x86_64 になっています )

  11. 次にダイアログの上部にある『プラットフォーム(P):』を今度は『すべてのプラットフォーム』に変更します。

  12. 次に左側のリストから『構成プロパティ』→『全般』を選び、
     ダイアログ右側に表示されている『プラットフォーム ツールセット』の項目を『Clang 5.0』に変更します。

  13. 次に左側のリストから『構成プロパティ』→『C/C++』→『言語』を選び、
     ダイアログ右側に表示されている『C++ 言語標準』の項目を『C++17 (-std=c++1z)』に変更します。

  14. 次に左側のリストから『構成プロパティ』→『C/C++』→『プリコンパイル済みヘッダー』を選び、

    ダイアログ右側に表示されている『プリコンパイル済みヘッダー』の項目を『使用』から
    『プリコンパイル済みヘッダーを使用しない』に変更した後、ダイアログ右下にある『適用(A)』ボタンを押します。

  15. 次に左側のリストから『構成プロパティ』→『リンカー』→『入力』を選びます。

  16. ダイアログ右側に表示されている『ライブラリの依存ファイル』の項目には

%(LibraryDependencies);GLESv1_CM;EGL;

    と書かれていると思いますが、ここに追記して以下のように

%(LibraryDependencies);GLESv1_CM;EGL;stdc++;GLESv2;OpenSLES;m;DxLib;DxUseCLib;jpeg;png;zlib;tiff;theora_static;vorbis_static;vorbisfile_static;ogg_static;bullet;opus

    変更したあと、ダイアログ右下にある『OK』ボタンを押してダイアログを閉じます。

  17. 次に『ソリューションエクスプローラー』と書かれているリストに表示されている以下のファイルを

    android_native_app_glue.c
    android_native_app_glue.h
    pch.h

    右クリックして、表示されるプルダウンメニューから『削除(V)』をクリックして削除します。
    それぞれのファイルで

    『'android_native_app_glue.c'を'test.NativeActivity'から除外する場合には、[除外]を選んでください。
     'android_native_app_glue.c'を完全に削除する場合には、[削除]を選んでください。』

    のように訊ねられますので、『削除(D)』を選んでファイルを削除してください。

  18. 次に『ソリューションエクスプローラー』と書かれているリストに表示されている
    『AndroidManifest.xml』というファイルをダブルクリックして内容を表示します。
    その内容は以下のようになっていると思いますが、
<?xml version="1.0" encoding="utf-8"?> <!-- Changes made to Package Name should also be reflected in the Debugging - Package Name property, in the Property Pages --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.$(ApplicationName)" android:versionCode="1" android:versionName="1.0"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19"/> <!-- This .apk has no Java code itself, so set hasCode to false. --> <application android:label="@string/app_name" android:hasCode="false"> <!-- Our activity is the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="android.app.NativeActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="$(AndroidAppLibName)"/> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
    これを以下のように変更します。(色が緑の部分が変更箇所や追加箇所で、4箇所です)
<?xml version="1.0" encoding="utf-8"?> <!-- Changes made to Package Name should also be reflected in the Debugging - Package Name property, in the Property Pages --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.$(ApplicationName)" android:versionCode="1" android:versionName="1.0"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="26"/> <!-- This .apk has no Java code itself, so set hasCode to false. --> <application android:label="@string/app_name" android:hasCode="false" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <!-- Our activity is the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="android.app.NativeActivity" android:label="@string/app_name" android:configChanges="orientation|screenSize" android:launchMode="singleInstance"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="$(AndroidAppLibName)"/> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
    変更が完了したらメニューから『ファイル(F)』→『AndroidManifest.xml の保存(S)』を選択して保存します。

 プロジェクトの設定は以上です、お疲れ様でした。



5.プログラムを組む

 長いプロジェクトの設定が終わったので、漸くプログラムを組めます。
 『ソリューションエクスプローラー』と書かれているリストにある『main.cpp』をダブルクリックして内容を表示すると
最初から約300行のプログラムが書かれていますので、まずこれをすべて削除します。
( メニューから『編集(E)』→『すべて選択(A)』を選択した後、再度メニューから『編集(E)』→『削除(D)』
 選択するとすべて削除することができます )

 あと、プロジェクト作成後の初期状態では『main.cpp』の文字コード形式は『シフトJIS』なのですが Androidアプリの
コンパイラは『シフトJIS』には対応していないので、以下の手順で文字コードを『UTF-8』に変更します。

  ① 『ソリューションエクスプローラー』と書かれているリストにある『main.cpp』をダブルクリックして内容を
    表示した状態でメニューから『ファイル(F)』→『名前を付けて main.cpp を保存(A)...』を選択して
    『名前を付けてファイルを保存』ダイアログを表示します。

  ② 『名前を付けてファイルを保存』ダイアログの右下にある『上書き保存(S)』の項目を『エンコード付きで保存(V)...』
    に変更します。すると変更した瞬間に『名前を付けて保存の確認』ダイアログが表示されますので『はい(Y)』を選択してください。

  ③ 次に『保存オプションの詳細設定』ダイアログが表示されたら、その中の『エンコード(E):』の項目を
    『日本語(シフトJIS) - コードページ 932』から『Unicode(UTF-8 シグネチャ付き) - コードページ 65001』に
    変更して『OK』ボタンを押します。

 これで『main.cpp』の文字コード形式が『UTF-8』になります。
 因みに cppファイルや hファイルを新規作成した場合も、初期状態では『シフトJIS』となっていますので、
ソースファイルを新規作成した際もこの操作を行って文字コード形式を『シフトJIS』から『UTF-8』に変更
するようにしてください。

 さて、気を取り直して何もプログラムに書かれていない状態になった main.cpp に、以下のプログラムを入力します。

#include "DxLib.h" // プログラムは android_main から始まります int android_main( void ) { if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } DrawBox( 220, 140, 420, 340, GetColor( 255,255,255 ), TRUE ) ; // 四角形を描画する WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }



 プログラムはこれだけです、どの部分が何をしているのか簡単に説明します。
 まず最初の1行はDXライブラリを使用するために必要なファイル( DxLib.h )をインクルードしています。
 次の『int android_main( void )はDXライブラリを使用した Androidアプリのプログラムのスタート地点となる関数の宣言です。
( 因みにDXライブラリを使用しない Androidアプリのスタート地点も android_main ですが、戻り値や引数が異なります… )
 中括弧内の最初の文『if( DxLib_Init() == -1 ){ return -1 ; }』はDXライブラリを初期化して使える状態にするために必要な関数『DxLib_Init』を呼んでいます。
この関数はDXライブラリを使うプログラムを組む際には例外を除いてまず最初に呼び出す必要があります。
因みに『if(...』と書かれているのは初期化が失敗したらその時点でソフトを終了させるという処理を行うための物です。
 『DrawBox』は関数名そのまま四角形を描画するための関数です。
 その次の『WaitKey』はキーボードのキーが押されるまで処理を止める関数です。( Androidアプリでもキーボードを接続すればキーボードを使うことができます )
 最後の『DxLib_End() ;』は注釈にも書いてある通りDXライブラリの使用を終了する処理を行う関数を呼んでいる文です。
DXライブラリを使用しているプログラムは最後に必ずこの関数を呼ばなくてはなりません。



6.Androidエミュレーターの準備

 プログラムの入力も終わったので、早速実行!
 と、行きたいところですが、その前に『Windows上で動作する Android端末のエミュレーター』を用意する必要があります。
 Android のスマートフォンやタブレットを所持している場合は、その端末上で実行することもできるのですが
開発中は主に Androidエミュレーターでプログラムを実行することになるので、下記の手順を踏んでエミュレーターの準備を行います。

  ① Visual Studio Community 2017 のメニューの『ビルド(B)』→『構成マネージャー(O)...』を選択して
    構成マネージャーダイアログを開きます。

  ② 構成マネージャーダイアログの右上にある『アクティブ ソリューション プラットフォーム(P):』の項目を
    『ARM』に変更したあと、『閉じる』ボタンでダイアログを閉じます。

  ③ 次に Visual Studio Community 2017 のメニューの『ツール(T)』→『Android』→
      『Android デバイス マネージャー...』をクリックして、Android Device Managerを起動します。

  ④ 『Android Device Manager』のリストには最初は何も仮想デバイスが登録されていませんので、
    まず『+ New』のボタンを押して『New Device』のダイアログを表示します。

  ⑤ 『New Device』には設定項目が沢山ありますが、それぞれを以下のように入力してください。

    左側の項目
      Name Galaxy Nexus
      Base Device Galaxy Nexus
      Processor armeabi-v7a
      OS Kit Kat 4.4 - API 19
      Google APIs (チェックを入れる)






    右側の項目( 変更箇所のみ )
      hw.ramSize 768
      sdcard.size 200M
      skin.name 480x800
      vm.heapSize 64





     入力が完了したら、『New Device』ダイアログの右下の方にある『Create』ボタンを押して、
    仮想デバイスを作成します。

  ⑥ 次にリストに追加された『Galaxy Nexus』の項目の右側にある『Start』ボタンを押して仮想デバイス( エミュレーター )を起動します。
    起動には時間が掛かりますので、仮想デバイス画面上の『android』という文字が光っている表示が消えるまで暫く待ってください。

  ⑦ 仮想デバイス画面上の『android』という文字が光っている表示が消え、仮想デバイス( エミュレーター )が起動したら
    Visual Studio Community 2017 の画面に戻ってみてください、『使用可能なデバイスが存在しません。』又は
    『AVD_GalaxyNexus_ToolsForApacheCordova(オフライン)』などと表示されている箇所が
    『Galaxy Nexus(armeabiv7a - emulator-5554)』のような表示に変化していると思います。

     もし、表示が『(オフライン)』や『使用可能なデバイスが存在しません。』の表示のままだった場合は
    一度 Visual Studio Community 2017 を終了してから再起動してみてください、そうすることで起動した
    仮想デバイスが検出されると思います。( 比較的新しい機能のためか、この辺りはまだ不安定なようです )

 これで Androidエミュレーターの準備は完了です。



7.プロジェクトのビルド、実行

 エミュレーターの準備が完了したところで早速プログラムを実行してみましょう。実行するためには

  ① Visual Studio Community 2017 のメニューから『デバッグ(D)』→『デバッグの開始(S)』

  ② すると『これらのプロジェクトは変更されています(T): ビルドしますか?』と表示されるので『はい』を押します。

  ③ エラーがなければプログラムが実行されます。エラーがあった場合は画面下のウインドウ
     にエラー内容が出てきますので指示にしたがって問題を修正してください。

 仮想デバイス( エミュレーター )でのプログラムの実行は時間が掛かるので、数十秒待ってみてください。
…画面の中心に四角形が表示されたでしょうか?
 仮想デバイス( エミュレーター )や Visual Studio Community 2017 の Android対応はまだ安定していないのか、
プログラム実行直後にエラーが表示されてプログラムのデバッグ実行が停止してしまったり、
仮想デバイス( エミュレーター )がフリーズして強制終了しなければならなくなったりすることが
ちょくちょく発生しますので、その際は仮想デバイスの再起動や、『デバッグの開始』を再度行うなどしてください。
 あと、プログラムを終了する場合は Visual Studio Community 2017 のメニューから
『デバッグ(D)』→『デバッグの停止(E)』を選択します。

 さてできあがった Androidアプリのパッケージファイルですが、それはプロジェクトのフォルダの中の
『test\test.Packaging\ARM\Debug』の中に『test.apk』というファイル名で作成されます。
( プロジェクト名を『test』以外にした場合は、『test』の代わりに付けたプロジェクト名となります )

この apk ファイルを Android端末にインストールすれば Visual Studio Community 2017 を介さなくても作成したアプリが動作します。
( Android の Playストアに提出するファイルも、この apk ファイルとなります )

 これでDXライブラリを使っての Androidアプリ開発の方法はわかりました。後は好きにプログラムを組んで
ゲームを作るだけです。ですがまだDXライブラリの機能は初期化と終了とドットを描画する関数しかわかっていません。
 この他の関数は DXライブラリ関数リファレンスのページ で解説されていますのでそちらを参照して下さい。

 あと、Androidアプリの開発に関する基礎的な情報や注意点を Androidアプリ開発の基礎的な情報や注意点など
解説していますので、こちらも併せてご覧ください。




戻る