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


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

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

2.プロジェクトの作成

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

4.プログラムを組む

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

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



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

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

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

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

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



2.プロジェクトの作成

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

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

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

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


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

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

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

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

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

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



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

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

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

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

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

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

  D 次に右側に表示されている『追加のインクルード ディレクトリ』の項目にDXライブラリのパッケージ内に
    入っている『プロジェクトに追加すべきファイル_Android用』フォルダのパスを追加してから、
    再度ダイアログ右下にある『適用(A)』ボタンを押します。
    ( パスの例→  C:\DxLib_Android\プロジェクトに追加すべきファイル_Android用;
             ( パスの末端に次のパスとの区切りとなるセミコロン『;』も書きます )

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

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

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

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

  H 次に右側に表示されている『追加のライブラリ ディレクトリ』の項目にDと全く同じDXライブラリの
    パッケージ内に入っている『プロジェクトに追加すべきファイル_Android用』フォルダのパスを
    追加してから、再度ダイアログ右下にある『適用(A)』ボタンを押します。

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

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

%(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』ボタンを押してダイアログを閉じます。

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

    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)』を選んでファイルを削除してください。

  L 次に『ソリューションエクスプローラー』と書かれているリストに表示されている
    『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>
    これを以下のように変更します。(色が緑の部分が変更箇所や追加箇所で、3箇所です)
<?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" android:theme="@android:style/Theme.NoTitleBar"> <!-- 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)...』を選択して
    『名前を付けてファイルを保存』ダイアログを表示します。

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

  B 次に『保存オプションの詳細設定』ダイアログが表示されたら、その中の『エンコード(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 2017 のメニューの『ビルド(B)』→『構成マネージャー(O)...』を選択して
    構成マネージャーダイアログを開きます。

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

  B ダイアログを閉じた後には、画面上部に『使用可能なデバイスが存在しません。』又は
    『AVD_GalaxyNexus_ToolsForApacheCordova(オフライン)』と表示されている箇所がありますので、
    その少し右側にある下向きの小さい三角『▼』をクリックしてプルダウンメニューを表示します。
     そしてプルダウンメニューの中にある『Android 仮想デバイス マネージャー...』をクリックして
    『Android Virtual Device(AVD) Manager』を起動します。

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

     もし最初からリストに『AVD_GalaxyNexus_ToolsForApacheCordova』等の仮想デバイスが登録されていた場合は、
    それをクリックして選択した後、ウインドウの右側にある『Edit...』ボタンを押して、仮想デバイスの
    設定ダイアログ『Edit Android Virtual Device(AVD)』を開き、沢山ある設定の中の下のほうにある
    『Use Host GPU』というチェックボックスにチェックを入れるだけの変更を行った後、『OK』ボタンを押して
    設定ダイアログを閉じます。
     そしてDは何も仮想デバイスが登録されていなかった場合の解説なので、Eに進んでください。

  D 『Create new Android Virtual Device (AVD)』には設定項目が沢山ありますが、それぞれを以下のように入力してください。

      AVD Name: AVD_GalaxyNexus_ToolsForApacheCordova
      Device: Galaxy Nexus (4.65", 720 x 1280: xhdpi)
      Target: Android 4.4.2 - API Level 19
      CPU/ABI: ARM (armeabi-v7a)
      Keyboard: (チェックを入れる)Hardware keyboard present
      Skin: WVGA800
      Front Camera: None
      Back Camera: None
      Memory Options: RAM: 768  VM Heap: 64
      Internal Storage: 200 MiB
      SD Card 200 MiB
      Emulation Options: (チェック入れず)SnapShot  (チェック入れる)Use Host GPU













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

  E 次に改めてリストから『AVD_GalaxyNexus_ToolsForApacheCordova』を選択して、今度は『Start...』ボタンを押します。

  F すると『Launch Options』というダイアログを表示されますので、特に設定は変更せずに『Launch』ボタンを押して
    仮想デバイス( エミュレーター )を起動します。
    起動には時間が掛かりますので、仮想デバイス画面上の『android』という文字が光っている表示が消えるまで暫く待ってください。

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

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



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

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

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

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

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

 仮想デバイス( エミュレーター )でのプログラムの実行は時間が掛かるので、数十秒待ってみてください。
…画面の中心に四角形が表示されたでしょうか?
 仮想デバイス( エミュレーター )や 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アプリ開発の基礎的な情報や注意点など
解説していますので、こちらも併せてご覧ください。




戻る