アプリの開発方法
開発の流れ
- 製作 NScripter (2011/12/15)(解説)を使用して Windows PC でゲームを製作します。以下の入門講座が参考になると思います。
- 動作確認 Android 実機と PC を USB ケーブルで接続して製作したゲームデータを実機にコピーし、このページの一番上で配布しているアプリを使用して動作を確認します。問題があれば Windows PC に戻って修正します。
- アプリの作成 ゲームが完成したら、Android Studio でのアプリの作成方法を参考にインストール可能な専用アプリを作成します。
- 公開 Google Play、自身のウェブページ、電子媒体などでアプリを公開します。
Android Studio でのアプリの作成方法
統合開発環境(IDE)である Android Studio を使用してアプリを作成する方法について説明します。以下では Windows での作成方法について説明しますが、Linux や Mac でも同様の方法で作成できると思います(未確認)。
ソフトウェアの導入
- Android Studio のインストール
Android Studio からインストーラ(現時点での最新版は 4.0.1)をダウンロードしてインストールします。
- SDK のインストール
Android Studio から SDK Manager を起動し、以下のパッケージをインストールします。末尾のバージョンは現時点でのバージョンです。
- SDK Platforms
- SDK Tools
- Android SDK Build Tools 30.0.1
- NDK (Side by side)
- Android SDK Platform-Tools 30.0.4
- Android SDK Tools 26.1.1
- Google Play Licensing Library 1
- ライブラリと周辺プログラム一式 (SDK)から onscripter_android_studio-xxxxxxxx.zip をダウンロードして c:\src\ に展開します(xxxxxxxx にはバージョン番号が入ります)。
c:\src\ONScripter\...
- ONScripter のページから最新の ONScripter をダウンロードして ONScripter\app\src\main\cpp\application\onscripter-xxxxxxxx に展開します(xxxxxxxx にはバージョン番号が入ります)。
c:\src\ONScripter\app\src\main\cpp\application\onscripter-xxxxxxxx\ONScripter.h
c:\src\ONScripter\app\src\main\cpp\application\onscripter-xxxxxxxx\ONScripter.cpp
c:\src\ONScripter\app\src\main\cpp\application\onscripter-xxxxxxxx\...
アプリの作成
必要に応じてゲームデータの配布方法・カスタマイズを参考に設定を行った上で、以下の手順に従ってアプリを作成します。
- Android Studio を起動して c:\src\ONScripter を開きます。初回に以下のダイアログメッセージが表示される場合は「OK」を押してください。
Gradle settings for this project are not configured yet.
「Import Project from Gradle」のダイアログが表示される場合は、Gradle home に Gradle のインストール場所(たとえば以下)を指定して「OK」を押してください。
C:\Program Files\Android\Android Studio\gradle\gradle-5.1.1
- メニューバーの「File」→「New」→「Import Module」を選択し、以下のファイルを選択して読み込んでください。ただし、以下の赤字の箇所は、Windows のアカウント名で読み換えてください。また、途中で表示される Module name の項目はデフォルトの library のままにしてください。
C:\Users\username\AppData\Local\Android\Sdk\extras\google\market_licensing\library
- 以下のエラーメッセージが表示される場合は、Set ndk.dir in local.properties to ... をクリックしてください。
NDK not configured ...
もしくは、c:\src\ONScripter\local.properties に手動で以下の行を追加してください。赤字の箇所は、自身の環境に合わせて変更してください。
ndk.dir=C\:\\Users\\username\\AppData\\Local\\Android\\Sdk\\ndk\\20.0.5594570
- また,以下のエラーメッセージが表示される場合は、Remove minSdkVersion and sync project をクリックして Do Refactor ボタンを押すか、もしくは C:\src\ONScripter\library\src\main\AndroidManifest.xml を編集して、android:minSdkVersion="3" の記述を AndroidManifest.xml から削除してください。
Remove The minSdk version should not be declared in the android manifest file. You can move the version from the manifest to the defaultConfig in the build.gradle file.
- C:\src\ONScripter\library\build.gradle を以下の赤字のように修正して、compileSdkVersion と targetSdkVersion をどちらも 29 に変更し、minSdkVersion を 5 に変更してください。また、useLibrary 'org.apache.http.legacy' の行を追加してください。
android {
compileSdkVersion 29
...
defaultConfig {
minSdkVersion 5
targetSdkVersion 29
}
...
useLibrary 'org.apache.http.legacy'
}
- デフォルトでは 32bit ARM プロセッサ(armeabi-v7a)と 64bit ARM プロセッサ(arm64-v8a)用のアプリを作成します。32bit Intel プロセッサ用のアプリを作成する場合は以下の赤字の箇所を x86 に、64bit Intel プロセッサ用のアプリを作成する場合は以下の赤字の箇所を x86_64 に変更してください。
ONScripter/app/build.gradle:
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
デバッグ版
- 「Build」→「Make Project」を実行してビルドします。ビルドに成功すると、以下の場所にアプリが生成されます。
c:\src\ONScripter\app\build\outputs\apk\debug\app-debug.apk
リリース版(Google Play で公開する場合)
- IDE の左にある 「Build Variants」を選択し、app と library の Build Variant をそれぞれ release-arm64-v8a と release に変更します。
- 「Build」→「Make Project」を実行してビルドします。ビルドに成功すると、以下の場所にアプリが生成されます。
c:\src\ONScripter\app\build\outputs\apk\release\app-release-unsigned.apk
- 「Build」→「Generate Signed Bundle/APK」→「APK」を選択してアプリに署名をします。Key がない場合は「Create new」を押して Key を作成します。途中の Build Variants の項は release を選択し、Signature Versions の項は、Android Studio を使わないで作成したアプリと互換性を持たせる場合は V1 のみに、それ以外の場合は V1 と V2 の両方にチェックを入れてください。署名に成功すると、以下の場所に署名済みのアプリが生成されます。ここでは解説しませんが、「Android App Bundle」を使って作成しても構いません。
c:\src\ONScripter\app\release\app-release.apk
Windows でのアプリの作成方法
この方法は以前の方法で、現在はサポートしていません。
ソフトウェアの導入
長方形内のパスは例です。必ずしもこのとおりにする必要はありません。ただし、ディレクトリ名やファイル名に 2byte 文字(漢字やかな)やスペースが含まれないようにしてください。
※ONScripter on Androidの使い方自分用メモもぜひ参考にしてください
- Java SE Downloads の JDK DOWNLOAD を選択し、Java SE Development Kit 8 (64bit版 Windows の場合は jdk-8u162-windows-x64.exe など) をインストールしてください。
C:\Program Files\Java\jdk1.8.0_162\...
- 環境変数 JAVA_HOME を設定します。 (例 C:\Program Files\Java\jdk1.8.0_162)
- Android Studioの一番下の「コマンドラインツールのみ入手する」から入手できる最新の SDK Tools では、25.3.0 以降から android コマンドで update を指定できなくなってしまったため、25.2.5 を使用します。tools_r25.2.5-windows.zipをダウンロードして以下の場所に展開します。
c:\src\android-sdk\...
また SDK tools インストール後に、c:\src\android-sdk\tools\android.bat を起動し、以下のパッケージをインストールしてください。
- Tools
- Android SDK Tools (25.2.5)
- Android SDK Platform-tools (29.0.2)
- Android SDK Build-tools (29.0.2)
- Android 9.0 (API 28)
- Extras
- Android Support Repository (47)
- Google Play Licesing Library
- NDK Downloads から最新の NDK (例 android-ndk-r16b-windows-x86_64.zip) をダウンロードして c:\src\ に展開します。
c:\src\android-ndk-r16b\...
- ライブラリと周辺プログラム一式 (SDK)から onscripter_android-xxxxxxxx.tar.gz をダウンロードして以下の場所に展開します(xxxxxxxx にはバージョン番号が入ります)。
c:\src\onscripter_android\jni\...
c:\src\onscripter_android\src\...
c:\src\onscripter_android\...
- ONScripter のページから最新の ONScripter をダウンロードして onscripter_android\jni\application\onscripter-xxxxxxxx に展開します(xxxxxxxx にはバージョン番号が入ります)。
c:\src\onscripter_android\jni\application\onscripter-xxxxxxxx\ONScripter.h
c:\src\onscripter_android\jni\application\onscripter-xxxxxxxx\ONScripter.cpp
c:\src\onscripter_android\jni\application\onscripter-xxxxxxxx\...
- Apache Ant の Binary Distributions からバイナリ(例 apache-ant-1.10.2-bin.zip)をダウンロードして適当な場所に展開します。
c:\src\apache-ant-1.10.2-bin\...
アプリの作成
必要に応じてゲームデータの配布方法・カスタマイズを参考に設定を行った上で、コマンドプロンプトを立ち上げ、以降の手順に従ってアプリを作成してください。実行ファイルのパスは環境に合わせて適宜変更してください。
まず、Google Play Licesing package ライブラリの設定をします(最初に1度だけ実行します)。
> cd c:\src\android-sdk\extras\google\market_licensing\library
> c:\src\android-sdk\tools\android.bat update project -p . --target android-28
注意:先頭の > はプロンプトなので入力しません。また、> から(もしあれば次の > まで)のコマンドは複数行に分けず1行で入力してください。以降も同じです。
また、以下のようにして android.support.v4.provider.DocumentFile の Java バイトコードを含む classes.jar を aar ファイルから抽出してコピーします(最初に1度だけ実行します)。
- c:\src\android-sdk\extras\android\m2repository\com\android\support\support-v4\24.1.1\support-v4-24.1.1.aar を c:\src にコピー
- ファイル名を c:\src\support-v4-24.1.1.zip に変更し、エクスプローラ等でダブルクリックして中身を展開
- classes.jar を classes_support.jar に名前を変更して c:\src\onscripter_android\libs にコピー
さらに、以下のようにして android.support.appcompat-v7v4.provider.DocumentFile の Java バイトコードを含む classes.jar を aar ファイルから抽出してコピーします(最初に1度だけ実行します)。
- c:\src\android-sdk\extras\android\m2repository\com\android\support\appcompat-v7\24.1.1\appcompat-v7-24.1.1.aar を c:\src にコピー
- ファイル名を c:\src\appcompat-v7-24.1.1.zip に変更し、エクスプローラ等でダブルクリックして中身を展開
- classes.jar を classes_appcompat.jar に名前を変更して c:\src\onscripter_android\libs にコピー
さらに、以下のようにして org.apache.http.legacy.jar をコピーします(最初に1度だけ実行します)。
- c:\src\android-sdk\platforms\android-28\optional\org.apache.http.legacy.jar を c:\src\android-sdk\extras\google\market_licensing\library\libs\ にコピー
デバッグ版
> cd c:\src\onscripter_android
> ..\android-ndk-r16b\build\ndk-build.cmd
> ..\android-sdk\tools\android.bat update project -p . --library ..\android-sdk\extras\google\market_licensing\library
> ..\apache-ant-1.10.2\bin\ant clean
> ..\apache-ant-1.10.2\bin\ant debug
注意:android.bat の --library の指定は絶対パスではなく相対パスにしてください。また、../ は1つ上のディレクトリを指します。
成功すると、以下の場所に debug キーで署名されたアプリが作成されます。このアプリは実機にインストールして実行できますが、Google Play では公開できません。
onscripter_android\bin\ONScripter-debug.apk
リリース版(Google Play で公開する場合)
> cd c:\src\onscripter_android
> ..\android-ndk-r16b\build\ndk-build.cmd
> ..\android-sdk\tools\android.bat update project -p . --library ..\android-sdk\extras\google\market_licensing\library
> ..\apache-ant-1.10.2\bin\ant clean
> ..\apache-ant-1.10.2\bin\ant release
注意:android.bat の --library の指定は絶対パスではなく相対パスにしてください。
成功すると、以下の場所に署名がされていないアプリが作成されます。
onscripter_android\bin\ONScripter-release-unsigned.apk
次に電子署名を行います。
まず、以下のコマンドを実行して証明書(鍵)release.keystore を作成します(コマンドは2行に分けず1行で入力してください)。releasename は鍵の別名で、自由に付けてください。この作業は電子署名の度に行わずに、事前に1度だけ行います。毎回行うと電子署名が変更されてしまい、アプリの更新インストールができなくなります。
> "c:\Program Files\Java\jdk1.8.0_162\bin\keytool.exe" -genkey -v -keystore release.keystore -alias releasename -keyalg RSA -validity 10000
いくつか質問に答える必要があるので、keytoolコマンドで署名ファイルの作成などを参考に入力してください。生成された証明書(鍵) release.keystore は消さないように注意してください。
次に、以下のコマンドを実行してアプリに電子署名をします。
> "c:\Program Files\Java\jdk1.8.0_162\bin\jarsigner.exe" -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release.keystore bin/ONScripter-release-unsigned.apk releasename
最後に、zipalign で以下のようにアプリを最適化します。
> ..\android-sdk\build-tools\28.0.2\zipalign.exe -f -v 4 bin/ONScripter-release-unsigned.apk bin/ONScripter-release-signed.apk
これで、Google Play から公開可能なアプリ bin/ONScripter-release-signed.apk が完成しました。
Linux でのアプリの作成方法
この方法は以前の方法で、現在はサポートしていません。
64bit 版 Linux での開発方法を説明します。当方の環境(Linux Debian/Stretch)を元に説明します。
ソフトウェアの導入
- Android Studioの一番下の「コマンドラインツールのみ入手する」から入手できる最新の SDK Tools では、25.3.0 以降から android コマンドで update を指定できなくなってしまったため、25.2.5 を使用します。tools_r25.2.5-linux.zipをダウンロードして適当な場所(例 /usr/local/src/android-sdk/)に展開してください。以下、<path_to_sdk>は展開した場所のパス(例 /usr/local/src/andorid-sdk)で置き換えてください。また、環境変数の PATH に <path_to_sdk>/tools と <path_to_sdk>/tools/bin を追加してください。
- SDK tools をインストールした後に、android を起動して、以下のパッケージをインストールしてください。Android SDK Platform-tools と Android SDK Build-tools は最新のバージョンで構いません。
- Tools
- Android SDK Tools (25.2.5)
- Android SDK Platform-tools (29.0.2)
- Android SDK Build-tools (29.0.2)
- Android 9.0 (API 28)
- Extras
- Android Support Repository, revision 47
- Google Play Licesing Library, revision 1
コマンドラインから実行する場合は、以下のコマンドから既にインストールされているパッケージとインストール可能なパッケージの一覧を確認できます。
> sdkmanager --list
...
build-tools;29.0.2 | 29.0.2 | Android SDK Build-Tools 29.0.2
...
extras;android;m2repository | 47.0.0 | Android Support Repository
...
extras;google;market_licensing | 1 | Google Play Licensing Library
...
platform-tools | 29.0.2 | Android SDK Platform-Tools
...
platforms;android-28 | 6 | Android SDK Platform 28
...
注意:先頭の > はプロンプトなので入力しません。以降も同じです。
以下のコマンドによって必要なパッケージをインストールします。
> sdkmanager "build-tools;29.0.2"
> sdkmanager "extras;android;m2repository"
> sdkmanager "extras;google;market_licensing"
> sdkmanager "platform-tools"
> sdkmanager "platforms;android-28"
- NDK Downloadsの最新の NDK (例 android-ndk-r16b-linux-x86_64.zip) をダウンロードして適当な場所(例 /usr/local/src/)に展開します。以下、<path_to_ndk>は展開した場所のパス(例 /usr/local/src/andorid-ndk-r16b)で置き換えてください。
- ライブラリと周辺プログラム一式 (SDK)から onscripter_android.tar.gz をダウンロードして適当な場所に展開します。
- ONScripter のページから最新の ONScripter をダウンロードして onscripter_android/jni/application/onscripter-xxxxxxxx に展開します。
- Oracle/Sun の JDK, Apache Ant が必要になるのでディストリビューションのパッケージシステムなどを使ってインストールしてください。Oracle/Sun JDK のパッケージがない場合、Debian ではJava Sunに従って以下のように自分でパッケージを作成してインストールしてください。JDK 自体は、Java SE Downloads の JDK DOWNLOAD を選択し、Java SE Development Kit 8 (64bit版 Linux の場合は jdk-8u162-linux-x64.tar.gz など) をダウンロードしてください。
> fakeroot make-jpkg jdk-8u162-linux-x64.tar.gz
> su
> dpkg -i oracle-java8-jdk_8u162_amd64.deb
さらに、以下のようにしてインストールした JAVA を選択します
> update-alternatives --config java
アプリの作成
必要に応じてゲームデータの配布方法・カスタマイズを参考に設定を行った上で、以下の手順に従ってアプリを作成してください。
まず、Google Play Licesing Library ライブラリの設定をします(最初に1度だけ実行します)。
> cd <path_to_sdk>/extras/google/market_licensing/library
> android update project -p . --target android-28
また、以下のようにして android.support.v4.provider.DocumentFile の Java バイトコードを含む classes.jar を aar ファイルから抽出してコピーします(最初に1度だけ実行します)。
> unzip <path_to_sdk>/extras/android/m2repository/com/android/support/support-v4/24.1.1/support-v4-24.1.1.aar -d /tmp
> cp /tmp/classes.jar onscripter_android/libs/classes_support.jar
さらに、以下のようにして android.support.appcompat-v7v4.provider.DocumentFile の Java バイトコードを含む classes.jar を aar ファイルから抽出してコピーします(最初に1度だけ実行します)。
> unzip <path_to_sdk>/extras/android/m2repository/com/android/support/appcompat-v7/24.1.1/appcompat-v7-24.1.1.aar -d /tmp
> cp /tmp/classes.jar onscripter_android/libs/classes_appcompat.jar
さらに、以下のようにして org.apache.http.legacy.jar をコピーします(最初に1度だけ実行します)。
> cp <path_to_sdk>/platforms/android-28/optional/org.apache.http.legacy.jar <path_to_sdk>/extras/google/market_licensing/library/libs/
デバッグ版
> cd onscripter_android
> ndk-build
> android update project -p . --library <relative_path_to_sdk>/extras/google/market_licensing/library
> ant clean
> ant debug
注意:<relative_path_to_sdk>は現在のディレクトリから SDK までの相対パスを指定してください。絶対パスにするとうまくいきません。
成功すると、以下の場所に debug キーで署名されたアプリが作成されます。このアプリは実機にインストールして実行できますが、Google Play では公開できません。
onscripter_android/bin/ONScripter-debug.apk
リリース版(Google Play で公開する場合)
> cd onscripter_android
> ndk-build
> android update project -p . --library <relative_path_to_sdk>/extras/google/market_licensing/library
> ant clean
> ant release
注意:<relative_path_to_sdk>は現在のディレクトリから SDK までの相対パスを指定してください。絶対パスにするとうまくいきません。
成功すると、以下の場所に署名がされていないアプリが作成されます。
onscripter_android/bin/ONScripter-release-unsigned.apk
次に電子署名を行います。
まず、以下のコマンドを実行して証明書(鍵)release.keystore を作成します。releasename は鍵の別名で、好きな文字列に置き換えてください。この作業は電子署名の度に行わずに、事前に1度だけ行います。毎回行うと電子署名が変更されてしまい、アプリを更新したときにアップデートができなくなります(一旦アプリを削除すればインストールできます)。また、将来アプリを更新するときに必要になるので、鍵の別名は忘れないようにメモしておいてください。
> keytool -genkey -v -keystore release.keystore -alias releasename -keyalg RSA -validity 10000
いくつか質問に答える必要があるので、keytoolコマンドで署名ファイルの作成などを参考に入力してください。生成された証明書(鍵) release.keystore は消さないように注意してください。
次に、以下のコマンドを実行してアプリに電子署名をします。
> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release.keystore bin/ONScripter-release-unsigned.apk releasename
最後に、zipalign で以下のようにアプリを最適化します。zipalign は <path_to_sdk>/build-tools/28.0.2/zipalign などにあります。
> zipalign -f -v 4 bin/ONScripter-release-unsigned.apk bin/ONScripter-release-signed.apk
これで、Google Play から公開可能なアプリ bin/ONScripter-release-signed.apk が完成しました。
ライブラリと周辺プログラム一式 (SDK)
ONScripter on Android のアプリを作成するために必要な ONScripter 本体以外のプログラム一式です。Android Studio を使う場合は onscripter_android_studio-xxxxxxxx.zip を、Android Studio を使わない場合は onscripter_android-xxxxxxxx.tar.gz をダウンロードしてください。
Port of libSDL to Android mobile platform, including several games.で Android に移植されている SDL とゲームを元に作成しています。元にしたソースは2010年5月時点のものです。pelya/commandergeniusの last-working-sdl-1.3 が元にしたソースに最も近いと思います。秋月かたねさんが公開されていた ONScripter for Android 2.1 (ARM) 20100530a test1 のソースも参考にさせていただきました。
以下のファイルが含まれています。
- アプリをコンパイルするための設定ファイル・リソース・アイコン
- Android と ONScripter の橋渡しをする JAVA のプログラム
- ONScripter.java (MainActivity.java を元に以下の機能を追加)
- 起動時のゲームデータ選択・Native Code (C++) で作成された ONScripter 本体部分の呼び出し・ソフトウェアボタン処理・メニュー処理・Intent を利用した動画再生
- Video.java (以下の機能を追加)
- 実機のボリュームボタンによる音量変更
- onSurfaceChanged() 内で OpenGL の初期化を行い、onPause(), onResume() 内で SDL_ACTIVEEVENT を発行して ONScripter 側でメインスレッドのロック(GLThread.SwapBuffers() へのアクセス)と再開時の画面再設定が行われるように変更 (あまり綺麗な方法ではありませんが、タスク切り替えに対応するため)
- DataDownload.java (以下の機能を改良・追加)
- Google Play もしくは自身で用意したサイトからのゲームデータダウンロード機能
- SDL-1.3 (SDL port for Android SDK/NDK 1.6 からコピー)
- SDL_image (SDL port for Android SDK/NDK 1.6 からコピー)
- SDL_mixer (SDL port for Android SDK/NDK 1.6 からコピー + sdl_mixer.diff)
- SDL_ttf (SDL_ttf-2.0.11 + TTF_RenderGlyph_Shaded 関数へのパッチ)
- freetype (SDL port for Android SDK/NDK 1.6 からコピー)
- jpeg (SDL port for Android SDK/NDK 1.6 からコピー)
- png (SDL port for Android SDK/NDK 1.6 からコピー)
- libogg-1.3.3 (以下のパッチを当てた後,不要なファイルを削除してからファイル配置を変更)
- tremor (libvorbisidec_1.2.1+git20180316 に以下のパッチを当てた後,不要なファイルを削除)
- lua-5.1.5
- bzip2-1.0.5
- libmad-0.15.1b (以下のパッチを当てた後,不要なファイルを削除)
ゲームデータの配布方法
ゲームデータの配布方法には以下の3通りがあります。
- パターン1:Google Play からダウンロードする方法(推奨)
- パターン2:アプリに内蔵する方法
- パターン3:自身で用意したサーバからダウンロードする方法
パターン1:Google Play からダウンロードする方法
Google Play で配布可能なアプリのサイズには 50MB の制限がありますが、最大 2GB の拡張ファイルを同時に2つまで配布できます。この方法では、ゲームデータを拡張ファイルとして Google Play に登録しておき、Google Play からアプリとゲームデータ(最大 2GB)を両方ダウンロードします。
注意点として、インストールの際に、一時的に内部ストレージにアプリと拡張ファイルの合計サイズ分の空きが必要になります。ゲームデータ自体は SD カードにインストールされるため、あくまで一時的です。
strings.xml の修正
以下のように赤字の個所を修正してください。
ONScripter/app/src/main/res/values/strings.xml:
(もしくは onscripter_android/res/values/strings.xml:)
<bool name="use_launcher">false</bool>
<bool name="use_download">true</bool>
<string name="download_version">.20180405</string>
<string name="download_url"></string>
<string name="public_key">NKC4A+...</string>
- download_version
- ゲームデータのバージョン管理に使用します。ゲーム起動時にこのファイルが存在しない場合に、ゲームデータを Google Play からダウンロードします。
シナリオや画像などゲームデータを修正してアプリを再作成する場合は更新してください。プログラム(ONScripter)本体の更新(バグ修正によるバージョンアップなど)に伴いアプリを再作成する場合は更新する必要はありません。
- download_url
- 空にしてください。スペースなどを含まないように注意してください。
- public_key
- Google Play Consoleの「開発ツール」の「サービスとAPI」の「このアプリのライセンス用鍵」(Public key)の内容をコピーしてください。
ONScripter でサポートする拡張ファイルは1つだけです。ゲームの構成ファイルを全てまとめた単一の zip ファイルを、拡張ファイルとしてアプリと一緒に登録します。ゲームの構成ファイルのうち nscript.dat, arc.nsa は zip 内の(ディレクトリを挟まない)直下に置いてください。
例えば、Lhaca デラックス版、Explzh、WinZipなどのzip作成ソフトを起動し、nscript.dat, arc.nsa などのファイルを直接ドラッグ&ドロップすれば zip ファイルが作成されます。iOS 版でも同じ zip ファイルが使用できます。
アプリを実行すると、ゲームの構成ファイルは外部記憶装置(SDカードなど)の以下の場所に展開されます。
/Android/data/<package_name>/
例えばパッケージ名が jp.ogapee.onscripter の場合は /sdcard/Android/data/jp.ogapee.onscripter/ などになります。また、端末の API Level が 8 以上(Android 2.2 以上)の場合は、ダウンロードしてここに展開されたファイルはアプリケーションのアンインストール時に同時に消去されます。
上の例では、ONScripter 起動時に /sdcard/Android/data/<package_name>/.20180405 が存在しない場合、Google Play からゲームデータをダウンロードして /sdcard/Android/data/<package_name>/ 以下に展開し、最後に .20180405 (空ファイル)を作成します。その後に、/sdcard/Android/data/<package_name>/ 直下にゲームの構成ファイルがあることを想定してゲームを起動します。
AndroidManifest.xml の修正
また、Google Play からダウンロードするため、インターネット通信の「完全なインターネットアクセス」と「マーケットライセンスの確認」を許可します。デフォルトでは <!-- と --> で囲まれてコメントアウトされており不許可になっているので、以下のように <!-- と --> を削除してください。
ONScripter/app/src/main/AndroidManifest.xml:
(もしくは onscripter_android/AndroidManifest.xml:)
<uses-permission android:name="com.android.vending.CHECK_LICENSE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
LicenseChecker.java の修正
さらに、Android 5.0 以降では、LicenseChecker.java の 153 行目を以下の赤字の箇所のように修正しないと、拡張ファイルのダウンロードに失敗します。修正した後に、Android Studio で「Make Project」を実行してビルドしてください。
ONScripter/library/src/main/java/com/google/android/vending/licensing/LicenseChecker.java:
.bindService(
new Intent(
new String(
Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))).setPackage("com.android.vending"),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
パターン2:アプリに内蔵する方法
この方法は、ゲームデータとアプリの合計サイズが 50MB 未満の場合に利用できます。以下のように赤字の個所を修正してください。
ONScripter/app/src/main/res/values/strings.xml:
(もしくは onscripter_android/res/values/strings.xml:)
<bool name="use_launcher">false</bool>
<bool name="use_download">false</bool>
<string name="download_version">.20180405</string>
ゲームの構成ファイルは ONScripter/app/src/main/assets/(もしくは onscripter_android/assets/)以下に配置してください。これらのファイルはアプリに内蔵され、初回や download_version 更新時に外部記憶装置(SDカードなど)の以下の場所にコピーされます。
/Android/data/<package_name>/
例えばパッケージ名が jp.ogapee.onscripter の場合は /sdcard/Android/data/jp.ogapee.onscripter/ などになります。また、端末の API Level が 8 以上(Android 2.2 以上)の場合は、ここにあるファイルはアプリケーションのアンインストール時に同時に消去されます。
正確には、ゲーム起動時にこの場所に download_version で指定したファイルが存在しない場合に、以下の例のように ONScripter/app/src/main/assets/(もしくは onscripter_android/assets/)以下に配置された全ファイル(アプリに内蔵されます)をこの場所にコピーし、最後に download_version で指定した空ファイルを作成してゲームを開始します。
アプリ作成時の配置(コピー元):
assets/arc.nsa
assets/nscript.dat
assets/bgm/bgm01.ogg
初回起動後もしくはアプリ更新後の構成(コピー先):
/sdcard/Android/data/jp.ogapee.onscripter/.20180405
/sdcard/Android/data/jp.ogapee.onscripter/arc.nsa
/sdcard/Android/data/jp.ogapee.onscripter/nscript.dat
/sdcard/Android/data/jp.ogapee.onscripter/bgm/bgm01.ogg
中にファイルが1つもない空のフォルダは省略されます。フォルダには1つ以上の何らかのファイルを置いてください。
なお、Android 2.2 以前では、assets フォルダにある 1MB 以上のファイルを圧縮して apk に含めると、プログラムから読み込む際に失敗してしまいます。これを回避するには、ant の設定ファイルを以下のように書き換えて <nocompress /> を有効にし、assets フォルダ内のファイルを圧縮しないで apk を作成します。
Android Studio の場合
ゲームデータに含まれるすべてのファイルの拡張子を、以下のファイルの noCompress の項に列挙してください。
ONScripter/app/build.gradle:
aaptOptions {
noCompress 'envdata', 'txt', 'dat', 'sar', 'nsa', 'ns2', 'sav', 'ttf', 'png', 'bmp', 'jpg', 'wav', 'ogg', 'mp3', 'mpg'
}
Windows の場合 (Linux の場合も同様)
c:/src/android-sdk/tools/ant/build.xml:
変更前:コメントアウトされています
<!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw -->
変更後:assets 以下に配置するファイルの拡張子を全て列挙します
<nocompress extension="dat" />
<nocompress extension="ttf" />
<nocompress extension="nsa" />
<nocompress extension="ogg" />
パターン3:自身で用意したサーバからダウンロードする方法
自身で WEB サイトを用意し、そこにゲームデータを置いてダウンロードしてもらいます。ゲームデータは直接外部ストレージ(SDカードなど)にダウンロードされるため、インストール時に内部ストレージを空けておく必要はありません。
以下のように赤字の個所を修正してください。
ONScripter/app/src/main/res/values/strings.xml:
(もしくは onscripter_android/res/values/strings.xml:)
<bool name="use_launcher">false</bool>
<bool name="use_download">true</bool>
<string name="download_version">.20180405</string>
<string name="download_url">http://*.*/*/game1_pack.zip</string>
- download_version
- ゲームデータのバージョン管理に使用します。ゲーム起動時にこのファイルが存在しない場合に、ゲームデータを自身で用意したサイトからダウンロードします。
シナリオや画像などゲームデータを修正してアプリを再作成する場合は更新してください。プログラム(ONScripter)本体の更新(バグ修正によるバージョンアップなど)に伴いアプリを再作成する場合は更新する必要はありません。
- download_url
- ゲームの構成ファイルを全てまとめた単一の zip ファイルの URL を指定します。XMLでは一部の特殊文字(&,<,>,",')はそのままでは使用できないので、URLに特殊文字が含まれている場合は、以下の表に従って置き換えてください。
置き換え前 | 置き換え後 |
& | & |
< | < |
> | > |
" | " |
' | ' |
ゲームの構成ファイルのうち nscript.dat, arc.nsa は zip 内の(ディレクトリを挟まない)直下に置いてください。
例えば、Lhaca デラックス版、Explzh、WinZipなどのzip作成ソフトを起動し、nscript.dat, arc.nsa などのファイルを直接ドラッグ&ドロップすれば zip ファイルが作成されます。iOS 版でも同じ zip ファイルが使用できます。
ゲームの構成ファイルは、外部ストレージ(SDカードなど)の以下の場所に展開されます。
/Android/data/<package_name>/
例えばパッケージ名が jp.ogapee.onscripter の場合は /sdcard/Android/data/jp.ogapee.onscripter/ などになります。また、端末の API Level が 8 以上(Android 2.2 以上)の場合は、ダウンロードしてここに展開されたファイルはアプリケーションのアンインストール時に同時に消去されます。
上の例では、ONScripter 起動時に /sdcard/Android/data/<package_name>/.20180405 が存在しない場合、自身で用意したサイトから game1_pack.zip をダウンロードして /sdcard/Android/data/<package_name>/ 以下に展開し、最後に .20180405 (空ファイル)を作成します。その後に、/sdcard/Android/data/<package_name>/ 直下にゲームの構成ファイルがあることを想定してゲームを起動します。
また、インターネット経由でダウンロードするため、インターネット通信の「完全なインターネットアクセス」を許可します(デフォルトではコメントアウトされており不許可になっています)。
カスタマイズ
アプリのバージョン番号の更新
アプリを更新する場合は、必ず以下の versionCode の赤字の数値を更新前の数値から増やしてください。指定できるのは数字のみで文字列は不可です。数値は 1 から順に増やしていっても構いませんし、以下の例のように年月日にすることもできます。
ONScripter/app/src/main/AndroidManifest.xml:
(もしくは onscripter_android/AndroidManifest.xml:)
android:versionCode="20180405"
パッケージ名の変更
以下の赤字の個所を変更すると、当サイトで配布しているアプリと共存できるようになります。アプリを Google Play などで第三者に公開する場合は変更してください。なお、以下の赤字の個所は同一のパッケージ名になるように注意してください。ただし、単語の区切り文字は、SDL_JAVA_PACKAGE_PATH は _ で、それ以外は . になります。
ONScripter/app/src/main/cpp/Android.mk:
(もしくは onscripter_android/jni/Android.mk:)
SDL_JAVA_PACKAGE_PATH := jp_ogapee_onscripter
ONScripter/app/src/main/java/jp/ogapee/onscripter/*.java:
(もしくは onscripter_android/src/*.java:)
package jp.ogapee.onscripter;
ONScripter/app/src/main/AndroidManifest.xml:
(もしくは onscripter_android/AndroidManifest.xml:)
package="jp.ogapee.onscripter"
パッケージ名を変更した場合は、直後にアプリを作成するときに ndk-build に -B オプションを付けて実行してください。ソースを全てコンパイルし直します。
Windows:
> ..\android-ndk-r16b\build\ndk-build.cmd -B
Linux:
> ndk-build -B
アプリケーション名の変更
アプリケーション名が英語の場合は以下の赤字の個所を変更してください。
ONScripter/app/src/main/res/values/strings.xml:
(もしくは onscripter_android/res/values/strings.xml:)
<string name="app_name">ONScripter</string>
アプリケーション名が日本語の場合は、上記の手順で対応する英語のアプリケーション名を設定するとともに、以下のファイルの<resources>の下に以下の項目を作成して日本語のアプリケーション名を設定してください。
ONScripter/app/src/main/res/values-ja/strings.xml:
(もしくは onscripter_android/res/values-ja/strings.xml:)
<string name="app_name">オーエヌスクリプター</string>
アイコンの変更
以下の画像ファイルを変更してください。
ONScripter/app/src/main/res/drawable-hdpi/icon.png: 72x72のアイコン
ONScripter/app/src/main/res/drawable-mdpi/icon.png: 48x48のアイコン
ONScripter/app/src/main/res/drawable-ldpi/icon.png: 36x36のアイコン
もしくは
onscripter_android/res/drawable-hdpi/icon.png: 72x72のアイコン
onscripter_android/res/drawable-mdpi/icon.png: 48x48のアイコン
onscripter_android/res/drawable-ldpi/icon.png: 36x36のアイコン
メニュー内容の初期設定
以下の赤字の個所を修正してください。
バージョン文字列
ONScripter/app/src/main/res/values/strings.xml:
(もしくは onscripter_android/res/values/strings.xml:)
<string name="version">ONScripter 20180405\nStudio O.G.A. Ogapee</bool>
メニューの「バージョン」が押されたときに表示する文字列を指定します。"\n"で改行されます。
ソフトウェアボタンの表示/非表示
ONScripter/app/src/main/res/values/strings.xml:
(もしくは onscripter_android/res/values/strings.xml:)
<bool name="button_visible">false</bool>
true の場合は表示状態で、false の場合は非表示状態でゲームを開始します。非表示の場合は、ゲーム画面はデバイス画面の中央に表示されます。開始後はメニューから切り替えられます。
文字の袋文字描画
ONScripter/app/src/main/res/values/strings.xml:
(もしくは onscripter_android/res/values/strings.xml:)
<bool name="render_font_outline">true</bool>
true の場合は起動オプションで --render-font-outline を指定した場合と同じになります。
縦長表示
以下のように赤字の個所を変更すると、縦長画面、つまり通常の表示から90度回転した状態で描画するようになります。
ONScripter/app/src/main/AndroidManifest.xml:
(もしくは onscripter_android/AndroidManifest.xml:)
android:screenOrientation="portrait"