Android Studio でのアプリの作成方法
統合開発環境(IDE)である Android Studio を使用してアプリを作成する方法について説明します。以下では Windows での作成方法について説明しますが、Linux や Mac でも同様の方法で作成できると思います(未確認)。
ソフトウェアの導入
- Android Studio のインストール
Android Studio からインストーラ(現時点での最新版は Electric Eel 2022.1.1 Patch 2)をダウンロードしてインストールします。
- SDK のインストール
Android Studio から SDK Manager を起動し、以下のパッケージをインストールします。末尾のバージョンは現時点でのバージョンです。
- SDK Platforms
- SDK Tools
- Android SDK Build Tools 33.0.3
- NDK (Side by side) 24.0.8215888
- Android SDK Platform-Tools 34.0.1
File -> Project Structure から確認できる Gradle 関連のバージョンは以下のとおりです。
- Android Gradle Plugin Version 7.2.2
- Gradle Version 7.4
- ライブラリと周辺プログラム一式 (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 を開きます。
- 以下のエラーメッセージが出る場合は、
A problem occurred evaluating project ':app'.
> Failed to apply plugin 'com.android.internal.application'.
> Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle を開いて、Gradle JDK を Android Studio 内蔵の jbr-11 に変更し、Try Again を選択します。
- 以下のエラーメッセージが出る場合は、
A problem occurred configuring project ':app'.
> SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable or by setting the sdk.dir path in your project's local properties file at 'C:\src\ONScripter\local.properties'.
C:\src\ONScripter\local.properties を開いて以下の赤字の箇所を Windows のアカウント名に変更してください。
sdk.dir=C\:\\Users\\username\\AppData\\Local\\Android\\sdk
- デフォルトでは 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 の Active Build Variant を release に変更します。
- 「Build」→「Make Project」を実行してビルドします。ビルドに成功すると、以下の場所にアプリが生成されます。
c:\src\ONScripter\app\build\outputs\apk\release\app-release-unsigned.apk
- 「Build」→「Generate Signed Bundle/APK」→「Android App Bundle」を選択してアプリに署名をします。Key がない場合は「Create new」を押して Key を作成します。途中の Build Variants の項は release を選択してください。署名に成功すると、以下の場所に署名済みのアプリが生成されます。
c:\src\ONScripter\app\release\app-release.aab
ライブラリと周辺プログラム一式 (SDK)
ONScripter on Android のアプリを作成するために必要な ONScripter 本体以外のプログラム一式です。Android Studio を使う場合は onscripter_android_studio-xxxxxxxx.zip をダウンロードしてください。
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 (以下のパッチを当てた後,不要なファイルを削除)
ゲームデータの配布方法
最大1GBまでのゲームデータを配布することができます。
strings.xml の修正
以下のように赤字の個所を修正してください。
ONScripter/app/src/main/res/values/strings.xml:
<bool name="use_launcher">false</bool>
ゲームの構成ファイルは ONScripter/asset_pack/src/main/assets/ 以下に配置してください。
アプリ作成時の配置例:
ONScripter/asset_pack/src/main/assets/arc.nsa
ONScripter/asset_pack/src/main/assets/nscript.dat
ONScripter/asset_pack/src/main/assets/bgm/bgm01.ogg
ファイル名(フォルダ名を含む)の大文字と小文字は区別されます。スクリプト中のファイル名とファイルシステムのファイル名が一致するように注意してください。
これらのファイルはアプリのインストール時に同時にインストールされます。
アプリが出力するファイルは getFilesDir() で取得されるアプリ固有の内部ストレージに書き込まれます。
また、以下のように設定して、assets フォルダ内のファイルを圧縮しないでアプリを作成するようにしてください。
Android Studio の場合
ゲームデータに含まれるすべてのファイルの拡張子を、以下のファイルの noCompress の項に列挙してください。
ONScripter/app/build.gradle:
aaptOptions {
noCompress 'envdata', 'txt', 'dat', 'sar', 'nsa', 'ns2', 'sav', 'ttf', 'png', 'bmp', 'jpg', 'wav', 'ogg', 'mp3', 'mpg'
}
カスタマイズ
アプリのバージョン番号の更新
アプリを更新する場合は、必ず以下の versionCode の赤字の数値を更新前の数値から増やしてください。指定できるのは数字のみで文字列は不可です。数値は 1 から順に増やしていっても構いませんし、以下の例のように年月日にすることもできます。
ONScripter/app/src/main/AndroidManifest.xml:
android:versionCode="20230323"
パッケージ名の変更
以下の赤字の個所を変更すると、当サイトで配布しているアプリと共存できるようになります。アプリを Google Play などで第三者に公開する場合は変更してください。なお、以下の赤字の個所は同一のパッケージ名になるように注意してください。ただし、単語の区切り文字は、SDL_JAVA_PACKAGE_PATH は _ で、それ以外は . になります。
ONScripter/app/src/main/cpp/Android.mk:
SDL_JAVA_PACKAGE_PATH := jp_ogapee_onscripter
ONScripter/app/src/main/java/jp/ogapee/onscripter/*.java:
package jp.ogapee.onscripter;
ONScripter/app/build.gradle:
namespac 'jp.ogapee.onscripter'
アプリケーション名の変更
アプリケーション名が英語の場合は以下の赤字の個所を変更してください。
ONScripter/app/src/main/res/values/strings.xml:
<string name="app_name">ONScripter</string>
アプリケーション名が日本語の場合は、上記の手順で対応する英語のアプリケーション名を設定するとともに、以下のファイルの<resources>の下に以下の項目を作成して日本語のアプリケーション名を設定してください。
ONScripter/app/src/main/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/app/src/main/res/values/strings.xml:
<string name="version">ONScripter 20230323\nStudio O.G.A. Ogapee</bool>
メニューの「バージョン」が押されたときに表示する文字列を指定します。"\n"で改行されます。
ソフトウェアボタンの表示/非表示
ONScripter/app/src/main/res/values/strings.xml:
<bool name="button_visible">false</bool>
true の場合は表示状態で、false の場合は非表示状態でゲームを開始します。非表示の場合は、ゲーム画面はデバイス画面の中央に表示されます。開始後はメニューから切り替えられます。
文字の袋文字描画
ONScripter/app/src/main/res/values/strings.xml:
<bool name="render_font_outline">true</bool>
true の場合は起動オプションで --render-font-outline を指定した場合と同じになります。
縦長表示
以下のように赤字の個所を変更すると、縦長画面、つまり通常の表示から90度回転した状態で描画するようになります。
ONScripter/app/src/main/AndroidManifest.xml:
android:screenOrientation="portrait"