はじめに

Android 2.0 以上で動作するノベルゲームエンジン ONScripter on Android のアプリ(apk)とソース一式を配布しています。

Android 4.4 以降 5.0 未満では、アプリから外部SDカードに書き込むことが出来ません。そのため、当サイトで配布するアプリを Android 4.4 以降 5.0 未満の機種で使う場合は、ゲームデータを外部SDカードではなく内部メモリ(内部SDカード)に配置するようにしてください。

対象言語アプリ
日本語ゲームONScripter 20191022 in Google Play
ONScripter-20191022-debug.apk (非推奨)
ONScripter-20190819-armeabi-debug.apk (Android 2.0 以降で動作可、非推奨)
Android 4.4 以降 5.0 未満をお使いの方は、外部SDカードではなく内部メモリ(内部SDカード)にゲームデータを配置してください。
英語ゲームONScripter-20170816-1byte-debug.apk
  (ENABLE_1BYTE_CHAR and FORCE_1BYTE_CHAR are enabled)

Google Play からのゲームデータ(最大 2GB)ダウンロード機能を備えており、ゲームデータの容量が大きくても Google Play で公開可能な有償・無償のノベルゲームアプリを作成することができます。ゲームデータの容量が少ない場合はゲームデータをアプリに内蔵することもできます。また、自身で用意したサイトからゲームデータをダウンロードすることもできます。

使用にあたって私に連絡する必要はありません。また、使用者に対して私から何か要求することもありません。自由に使ってください。

使用作品例

ぼくのゆめみるみらい for Android
bokuyume bokuyume
どちらかが俺に惚れている〜体験版〜
どちらかが俺に惚れているカジュアルゲーム1位獲得)
dochiore_free dochiore_free
NOeSIS02 -羽化-
NOeSIS02 NOeSIS02
アサルとスパイ
asaruspy asaruspy
Past Memory -過去と記憶- 体験版
Past Memory Trial Past Memory Trial
かえると剣鬼 参
kaeru3 kaeru3
キミはキメラR 全年齢版
小説
kimikime kimikime
NOeSIS -嘘を吐いた記憶の物語-
漫画(オンライン連載)漫画小説
NOeSIS01 NOeSIS01
NOeSIS 体験版
NOeSIS NOeSIS

アプリの使用方法

「ONScripter on Android」でパソコン用ノベルゲームをスマホでプレイ」の紹介記事が分かりやすいです。当サイトで配布するアプリではゲームデータを別途用意して起動時に選択しますが、自作のゲームデータを起動する専用アプリを開発することもできます。

インストール方法

Google Play で ONScripter を検索してインストールしてください。

当サイトで配布しているアプリをインストールする場合は、事前に Android 端末の「設定」→「セキュリティ」→「デバイス管理」の不明な提供元にチェックを入れ、Play ストア以外からのアプリのインストールを許可しておきます。次いで、Android 端末のウェブブラウザでこのページの一番上のアプリをクリックし、ダウンロード後にインストールしてください。

インストールに成功すると ONScripter のアイコン ONS がメニューに追加されます。

アクセス権限

必要最低限の以下のアクセス権限を要求します。

システムツール:端末のスリープを無効にする
ゲーム実行中に端末がスリープしないように要求します。
ストレージ:SDカードのコンテンツを修正/削除する
ゲームデータやセーブデータをSDカードに書き込むために要求します。
ネットワーク通信:完全なインターネットアクセス
専用アプリを開発して初回にゲームデータをダウンロードする場合に必要になります(それ以外の用途には使用しません)。当サイトで配布するアプリでは要求しません。
ネットワーク通信:マーケットライセンスの確認
Google Play からゲームデータをダウンロードする場合に必要になります。当サイトで配布するアプリでは要求しません。

ゲームデータの配置方法

SD カード(Android 4.4 以降 5.0 未満の場合は内部メモリ)の直下に ons という名前のディレクトリを作成し、その下にゲームごとにディレクトリ(名前は任意)を作成して、さらにその下にゲームの構成ファイルをコピーしてください。nscript.dat, arc.nsa の2つは最低必要になると思います。

/sdcard/ons/game1/nscript.dat (ゲームの構成ファイル)
                 /arc.nsa     (ゲームの構成ファイル)
                 /その他のゲームの構成ファイル (基本的に全てコピー)
/sdcard/ons/game2/...
  • ゲームの構成ファイル(arc.nsa など) は解像度変更などはせずに元のファイル(サブディレクトリを含む)をそのままコピーしてください。
  • デフォルトでは内蔵されているフォント(M+ フォントで配布されている mplus-2m-medium.ttf)を使用しますが、default.ttf という名前のフォントファイルをゲームデータと同じ場所に置くとそちらを使用します。使用可能なフォントについてはTrueType font による文字表示を参考にしてください。

実行方法

ONScripter のアイコン ONS をタップして ONScripter を起動してください。

Android 5.0 以降

図1のようなゲーム選択画面が表示されるので、ゲームデータがあるディレクトリに移動した後に、右下の選択ボタンを押してください。

Fig.1
図1:ゲームの選択(Android 5.0 以上)

Android 5.0 未満

図2のようなゲーム選択画面が表示されるので、ゲームデータがあるディレクトリに移動(選択)してください。..は親ディレクトリへの移動を表します。Render Font Outline にチェックを入れると、フォントの輪郭を描画するようになります。チェックを外すと通常の描画になります。

Fig.2
図2:ゲームの選択(Android 5.0 未満)

ボタン

ボタン機能
MENUメニュー表示 (次項で説明)
BACKマウス右クリック (ESC キー)
ボリューム(+/-)ボリューム変更
HOME実行をバックグラウンドに移し中断
(ONScripter のアイコンをタップすると再開します)
左クリック(ソフトウェアボタン)マウス左クリック (Enter キー)
右クリック(ソフトウェアボタン)マウス右クリック (ESC キー)
上ホイール(ソフトウェアボタン)マウス上ホイール
下ホイール(ソフトウェアボタン)マウス下ホイール
次のボタン(ソフトウェアボタン)次の選択ボタンにカーソルを移動
前のボタン(ソフトウェアボタン)前の選択ボタンにカーソルを移動
メニュー(ソフトウェアボタン)以下のメニューを表示
項目機能
オートモードオートモード開始 (a キー)
スキップ次の選択肢まで飛ばすモードに切り替え
速度切替瞬間表示・通常表示の切り替え
設定ボタンの透過度
フォントの輪郭の表示・非表示の切り替え(次回起動時に反映)
バージョンバージョンなどを表示
終了ゲームの終了 (SDL_QUIT を発行)

制限・注意事項

  • ディスプレイの解像度に合うようにゲーム画面の解像度が自動調整されます。色深度は 32bit です。
  • 電源ボタンを押すと画面がオフになり音楽の再生も中断されます。もう一度電源ボタンを押すとゲームを再開します。
  • HOME ボタンを押すと処理を中断して他のアプリを実行できるようになります。この状態では、オートモードにしていても進行せず、また音楽の再生も中断されます。ONScripter のアイコンをタップするとゲームを再開します。
  • 画面上でフリックするとその方向に応じて上下左右から上の表にあるソフトウェアボタンが引き出されます。ソフトウェアボタンの透過度はメニューから変更できます。
  • 別途動画プレーヤー(MX Player など)をインストールしておくと、スクリプト中の動画再生命令から動画を再生することができます。指定された動画を再生できる動画プレーヤーが無い場合はそのまま先に進みます。
  • 起動オプションの --force-button-shortcut を指定した状態で起動します。
  • 使用する音楽のサンプリング周波数は 22.05KHz か 44.1KHz のどちらかにしてください(混在可)。MP3, Ogg Vorbis, WAV をサポートしています。48 KHz などの音源は正常に再生されないので、えこでこツールなどを使って 44.1 KHz に変換してください。
  • 画像は BMP, JPEG, PNG, GIF をサポートしています。
  • Lua による拡張をサポートしています。(一部の機能は未実装)

アプリの開発方法

開発の流れ

  1. 製作 NScripter (2011/12/15)(解説)を使用して Windows PC でゲームを製作します。以下の入門講座が参考になると思います。
  2. 動作確認 Android 実機と PC を USB ケーブルで接続して製作したゲームデータを実機にコピーし、このページの一番上で配布しているアプリを使用して動作を確認します。問題があれば Windows PC に戻って修正します。
  3. アプリの作成 ゲームが完成したら、Android Studio でのアプリの作成方法を参考にインストール可能な専用アプリを作成します。
  4. 公開 Google Play、自身のウェブページ、電子媒体などでアプリを公開します。

Android Studio でのアプリの作成方法

統合開発環境(IDE)である Android Studio を使用してアプリを作成する方法について説明します。以下では Windows での作成方法について説明しますが、Linux や Mac でも同様の方法で作成できると思います(未確認)。

ソフトウェアの導入

  1. Android Studio のインストール

    Android Studio からインストーラ(現時点での最新版は 3.5.1)をダウンロードしてインストールします。

  2. SDK のインストール

    Android Studio から SDK Manager を起動し、以下のパッケージをインストールします。末尾のバージョンは現時点でのバージョンです。

    • SDK Platforms
      • Android 9.0 (Pie) API 28
    • SDK Tools
      • Android SDK Platform-Tools 29.0.4
      • Android SDK Tools 26.1.1
      • Google Play Licensing Library 1
      • NDK 20.0.5594570
  3. ライブラリと周辺プログラム一式 (SDK)から onscripter_android_studio-xxxxxxxx.zip をダウンロードして c:\src\ に展開します(xxxxxxxx にはバージョン番号が入ります)。
    c:\src\ONScripter\...
    
  4. 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\...
    

アプリの作成

必要に応じてゲームデータの配布方法カスタマイズを参考に設定を行った上で、以下の手順に従ってアプリを作成します。

  1. 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
    
  2. メニューバーの「File」→「New」→「Import Module」を選択し、以下のファイルを選択して読み込んでください。ただし、以下の赤字の箇所は、Windows のアカウント名で読み換えてください。また、途中で表示される Module name の項目はデフォルトの library のままにしてください。
    C:\Users\username\AppData\Local\Android\Sdk\extras\google\market_licensing\library
    
  3. 以下のエラーメッセージが表示される場合は、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.
    
  4. C:\src\ONScripter\library\build.gradle を以下の赤字のように修正して、compileSdkVersion と targetSdkVersion をどちらも 28 に変更し、minSdkVersion を 5 に変更してください。また、useLibrary 'org.apache.http.legacy' の行を追加してください。
    android {
        compileSdkVersion 28
        ...
        defaultConfig {
            minSdkVersion 5
            targetSdkVersion 28
        }
        ...
        useLibrary 'org.apache.http.legacy'
    }
    
  5. デフォルトでは 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'
            }
        }
    
デバッグ版
  1. 「Build」→「Make Project」を実行してビルドします。ビルドに成功すると、以下の場所にアプリが生成されます。
    c:\src\ONScripter\app\build\outputs\apk\debug\app-debug.apk       
    
リリース版(Google Play で公開する場合)
  1. IDE の左にある 「Build Variants」を選択し、app と library の Build Variant をそれぞれ release-arm64-v8a と release に変更します。
  2. 「Build」→「Make Project」を実行してビルドします。ビルドに成功すると、以下の場所にアプリが生成されます。
    c:\src\ONScripter\app\build\outputs\apk\release\app-release-unsigned.apk
    
  3. 「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の使い方自分用メモもぜひ参考にしてください

  1. 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)
  2. 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)
      • SDK Platform
    • Extras
      • Android Support Repository (47)
      • Google Play Licesing Library
  3. NDK Downloads から最新の NDK (例 android-ndk-r16b-windows-x86_64.zip) をダウンロードして c:\src\ に展開します。
    c:\src\android-ndk-r16b\...
    
  4. ライブラリと周辺プログラム一式 (SDK)から onscripter_android-xxxxxxxx.tar.gz をダウンロードして以下の場所に展開します(xxxxxxxx にはバージョン番号が入ります)。
    c:\src\onscripter_android\jni\...
    c:\src\onscripter_android\src\...
    c:\src\onscripter_android\...
    
  5. 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\...
    
  6. 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度だけ実行します)。

  1. c:\src\android-sdk\extras\android\m2repository\com\android\support\support-v4\24.1.1\support-v4-24.1.1.aar を c:\src にコピー
  2. ファイル名を c:\src\support-v4-24.1.1.zip に変更し、エクスプローラ等でダブルクリックして中身を展開
  3. classes.jar を classes_support.jar に名前を変更して c:\src\onscripter_android\libs にコピー

さらに、以下のようにして android.support.appcompat-v7v4.provider.DocumentFile の Java バイトコードを含む classes.jar を aar ファイルから抽出してコピーします(最初に1度だけ実行します)。

  1. c:\src\android-sdk\extras\android\m2repository\com\android\support\appcompat-v7\24.1.1\appcompat-v7-24.1.1.aar を c:\src にコピー
  2. ファイル名を c:\src\appcompat-v7-24.1.1.zip に変更し、エクスプローラ等でダブルクリックして中身を展開
  3. classes.jar を classes_appcompat.jar に名前を変更して c:\src\onscripter_android\libs にコピー

さらに、以下のようにして org.apache.http.legacy.jar をコピーします(最初に1度だけ実行します)。

  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)を元に説明します。

ソフトウェアの導入

  1. 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 を追加してください。
  2. 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)
      • SDK Platform
    • 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"
    
  3. NDK Downloadsの最新の NDK (例 android-ndk-r16b-linux-x86_64.zip) をダウンロードして適当な場所(例 /usr/local/src/)に展開します。以下、<path_to_ndk>は展開した場所のパス(例 /usr/local/src/andorid-ndk-r16b)で置き換えてください。
  4. ライブラリと周辺プログラム一式 (SDK)から onscripter_android.tar.gz をダウンロードして適当な場所に展開します。
  5. ONScripter のページから最新の ONScripter をダウンロードして onscripter_android/jni/application/onscripter-xxxxxxxx に展開します。
  6. 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 をダウンロードしてください。

リリース日SDK
20190911 onscripter_android_studio-20190911.zip
 onscripter_android-20190911.tar.gz
  UTF-8で書かれたスクリプト pscript.dat の読み込みに対応しました。
20190819 onscripter_android_studio-20190819.zip
  targetSdkVersion を 28 に変更しました。また、ARM のアーキテクチャや Android API の判定が不十分でビルド時や実行時に失敗する場合があったため修正しました。
 onscripter_android-20190819.tar.gz
  Android Studio を使わないでビルドした場合に、Android 2.0 (armeabi) 以上で実行できるアプリを作成できるようにしました。
20181128 onscripter_android_studio-20190818.zip
  targetSdkVersion が 24 以上でも Intent を利用して動画を再生できるようにしました。
  32bit (armeabi-v7a) と 64bit (arm64-v8a) 兼用のアプリを生成するようにしました。
20181030 onscripter_android_studio-20181030.zip
  targetSdkVersion を 26 に変更しました。
20180409 onscripter_android_studio-20180409.zip
 onscripter_android-20180409.tar.gz
  ディレクトリの作成に対応しました。
20180407 onscripter_android_studio-20180407.zip
 onscripter_android-20180407.tar.gz
  アプリに M+ フォントで配布されている mplus-2m-medium.ttf を内蔵するようにしました。default.ttf がない場合は内蔵フォントを使用します。
20180405 onscripter_android_studio-20180405.zip
 onscripter_android-20180405.tar.gz
  Android Studio 用のプロジェクトファイル(上)を公開
20180321 onscripter_android-20180321.tar.gz
  jni/jpeg/jidctfst.S を修正
20170816 onscripter_android-20170816.tar.gz
  NDK_TOOLCHAIN_VERSION := 4.9 を Application.mk に追加

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 カードにインストールされるため、あくまで一時的です。

以下のように赤字の個所を修正してください。

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
デベロッパーコンソールの「プロフィールの編集画面」の「公開鍵」(Public key)の内容をコピーしてください。

ONScripter でサポートする拡張ファイルは1つだけです。ゲームの構成ファイルを全てまとめた単一の zip ファイルを、拡張ファイルとしてアプリと一緒に登録します。ゲームの構成ファイルのうち nscript.dat, arc.nsa は zip 内の(ディレクトリを挟まない)直下に置いてください。
例えば、Lhaca デラックス版ExplzhWinZipなどの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>/ 直下にゲームの構成ファイルがあることを想定してゲームを起動します。

また、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>

パターン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に特殊文字が含まれている場合は、以下の表に従って置き換えてください。
置き換え前置き換え後
&&amp;
<&lt;
>&gt;
"&quot;
'&apos;
ゲームの構成ファイルのうち nscript.dat, arc.nsa は zip 内の(ディレクトリを挟まない)直下に置いてください。
例えば、Lhaca デラックス版ExplzhWinZipなどの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>/ 直下にゲームの構成ファイルがあることを想定してゲームを起動します。

また、インターネット経由でダウンロードするため、インターネット通信の「完全なインターネットアクセス」を許可します。(デフォルトではコメントアウトされており不許可になっています)

ONScripter/app/src/main/AndroidManifest.xml:
(もしくは onscripter_android/AndroidManifest.xml:)
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

カスタマイズ

アプリのバージョン番号の更新

アプリを更新する場合は、必ず以下の 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"
cutlass weblog
ONScripter on Android を使用したゲーム「NOeSIS -嘘を吐いた記憶の物語-」を公開されていました。お勧めです。

Tips

  • 関連するバグ報告
  • フォルダに .nomedia という空のファイルを置くと、そのフォルダより下の階層にある画像や音楽ファイルはギャラリーや音楽プレイヤーの検索対象外になるようです。
  • スクリーンショットを撮るには、端末を USB で PC と接続し、PC 側で Dalvic Debug Monitor (android-sdk\tools\ddms.bat) を起動して、端末側で接続タイプを HTC Sync にします。次に DDM で端末を選択し、Device -> Screen capture を実行します。
  • Ctrl-F11, Ctrl-F12 でエミュレータの画面表示を縦横に切り替えられま す。ONScripter on Android は横画面専用なので、エミュレータ使用時には切 り替えてください。また、Alt-Enter でフルスクリーンモードの切り替えがで きます。
  • エミュレータの作成直後は、SD card 上のファイルを実行できないよう なので、以下のようにマウントし直して実行可能にします。
    mount -o remount /dev/block/vold/179:0 /mnt/sdcard
    
  • Windows で SDK Setup.exe を立ち上げてパッケージを更新する際に "Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml" とエ ラーが出る場合は、c:\Users\username\.android\androidtool.cfg で以下のように設定するとうまくいくかもしれません。
    sdkman.force.http=true
    
  • Linux (Debian) で android を立ち上げてパッケージを更新する際に "Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml" とエ ラーが出る場合は、以下のようにするとうまくいくかもしれません。
    echo "0" > /proc/sys/net/ipv6/bindv6only
    
  • Android の JAVA のソースの入手法。
    > git clone https://android.googlesource.com/platform/frameworks/base.git
    > cd base
    > git tag -l
    # android 1.6 の場合
    > git checkout android-1.6_r2
    # android 2.1 の場合
    > git checkout android-2.1_r2.1s