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


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

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

2.プロジェクトの作成

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

4.プログラムを組む

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

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



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

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

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

 まず Visual Studio Community 2019 は、プログラムをコンパイルして実行可能な Androidアプリを作成する為のメインとなるソフトです。
 こちらはマイクロソフトのこちらのページ『Visual Studio のダウンロード』 と書かれている項目から無償で入手することができますので、
ありがたくダウンロード&インストールさせてもらって下さい。

インストールの際ですが、インストーラー( vs_community__745684224.1554021705.exe などのファイル名のファイル )を起動すると最初に『Visual Studio の何のバージョンをインストールするのかを選択するウィンドウ』が表示されますので、 Visual Studio Community 2019『インストール』ボタンを押してください。

『インストール』ボタンを押すと、次にインストールする機能を選択するダイアログが表示されますので、そこでは上部のタブを『ワークロード』を選択した状態にした後、 下の項目からは『C++ によるデスクトップ開発』『.NET によるモバイル開発』『C++ によるモバイル開発』の3つにチェックを入れてからダイアログ右下にある『インストール』を押してインストールを開始してください。
( 尚、もし既に Visual Studio Community 2019 をインストール済みの場合は、スタートメニューから『Visual Studio Installer』を起動することで上記のインストールウィンドウを表示することができます )

<注意!>
インストールの際に Visual Studio Community 2019 インストールするフォルダを既定のフォルダから変更することができますが、既定以外のフォルダにインストールしてしまうと Androidエミュレーターを起動できなくなってしまうので、設定は変更せず、必ず既定のフォルダにインストールするようにしてください。


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



2.プロジェクトの作成

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

   ① Visual Studio Community 2019 の起動メニューで『新しいプロジェクトを作成』をクリックして、
     『新しいプロジェクトの作成』ダイアログを表示します。

   ② ダイアログ上部の『プラットフォーム』の右側にある下矢印マークをクリックして『Android』を選択した後、
     下のリストから『Native-Activity アプリケーション (Android)』を選択してから、
     ダイアログ右下の『次へ(N)』をクリックします。

   ③ 次に『新しいプロジェクトを構成します』というダイアログが表示されたら、最初にプロジェクトの名前を
     『プロジェクト名』に入力します。ここでは仮に『test』とします。

   ④ 次にプロジェクトを作成するフォルダパスを『場所』に入力します。

   ⑤ 『ソリューションとプロジェクトを同じディレクトリに配置する』の
     チェックを外してから『作成(C)』をクリックします。

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



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

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

  1. 『ソリューションエクスプローラー』と書かれているリストに表示されている
    『(プロジェクト名).NativeActivity(android-27)』を右クリックして、プルダウンメニューから
    『プロパティ(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="21"/> <!-- 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)』を選択して保存します。

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



4.プログラムを組む

 長いプロジェクトの設定が終わったので、漸くプログラムを組めます。
 『ソリューションエクスプローラー』と書かれているリストにある『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ライブラリを使用しているプログラムは最後に必ずこの関数を呼ばなくてはなりません。



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

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

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

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

  ③ 次に Visual Studio Community 2019 のメニューの『ツール(T)』→『Android』→
      『Android Device Manager ...』をクリックして、Android Device Managerを起動します。

  ④ 『Android Device Manager』が起動したら早速『+ 新規』のボタンを押して『New Device』のダイアログを表示します。

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

    左側の項目
      名前 Pixel 2 Pie 9.0 - API 28
      基本デバイス Pixel 2 (+ Store)
      プロセッサ x86
      OS Pie 9.0 - API 28
      Google APIs (チェックを入れる)
      Google Play Store (チェックを入れる)






    右側の項目は変更無し

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

  ⑥ 次にリストに追加された『Pixel 2 Pie 9.0 - API 28』の項目の右側にある『開始』ボタンを押して仮想デバイス( エミュレーター )を起動します。
    起動には時間が掛かりますので、仮想デバイスの真っ黒の画面から時刻表示やアプリのアイコンなど表示されるまで暫く待ってください。

  ⑦ 仮想デバイス( エミュレーター )が起動して操作できる状態になったら
    Visual Studio Community 2019 の画面に戻ってみてください、『使用可能なデバイスが存在しません。』又は
    『pixel_2_pie_9_0_api_28(オフライン)』などと表示されている箇所が
    『pixel_2_pie_9_0_api_28(x86 - emulator-5554)』のような表示に変化していると思います。

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

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



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

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

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

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

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

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

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

 ただ、実際の Android の端末で動作する apkファイルを作成する場合は以下の手順でアクティブソリューション
プラットフォームを ARM か ARM64 に変更してからビルドする必要があります。

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

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

 この設定にした状態でソリューションのビルドを作成すると『test\test.Packaging\ARM64\Debug』の中に
『test.apk』が作成されます。

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

 なぜ仮想デバイスは x86 で、実際の Android 端末用は ARM64 なのかと申しますと、仮想デバイスを ARM64 に
すると仮想デバイスの動作が滅茶苦茶遅いからです。( パソコンの CPU が x86 なので、x86 の方が高速に動作する、
というわけです。仮想デバイスも ARM64 にできればややこしくなくて良いのですが… )

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

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




戻る