Android StudioでGodot Androidプラグイン(v1アーキテクチャ)用Android Libraryを作成して、Godotのサンプルプロジェクトに組み込み、実行するまでの手順をまとめました。
Godot 4.2では、Android Pluginがバージョンアップして、v2アーキテクチャになるようです。
名前の関係
GodotのAndroidプラグイン用のAndroid Libraryを生成して使うときの、ファイルと名前の関係を整理しました。
黄色の矢印は、元の名前を、矢印先に設定するという意味です。
①Godot Download pageからダウンロードしたgodot-lib.4.1.2.stable.template_release.aarを配置して、build.gradle(Module:androidlib)に依存関係を設定する。
②org.godotengine.godot.plugin.GodotPluginを派生したクラスのパッケージ名付きクラス名を、AndroidManifest.xmlに設定
③生成したAndroidライブラリのファイル名を、Godotプロジェクトのandroid/plugins配下に置いたgdapファイルの「binary=」に設定
④Godotプロジェクトのandroid/plugins配下に置いたgdapファイルの「name=」に設定した名前が、GodotのAndroidエクスポートの「プラグイン」オプションに自動的に表示される
⑤JavaクラスのgetPluginNameメソッドで返す文字列識別子を指定して、GDScriptからAndroidプラグインを検索し、singletonのインスタンスを取得する
⑥Javaクラスの@UsedByGodotでアノテーションしたメソッドを、GDScripから使用できる
Godotプラグイン用のAndroid Libraryを作成
Android Studioを使用して、Android Libraryをビルドする環境を準備します。Godot Engine Libraryへの依存関係を設定し、GDScriptから呼び出すクラスとメソッドを作成します。
Android Studioは、Electric Eel | 2022.1.1 Patch 1を使用しました。
Android StudioでNew Projectを作成する
「No Activity」を選択します。今回はActivityは使用せず、しかも後で削除するので何でも良いです。
新規プロジェクトのNameとPackage name、Save locationなどを設定して、「Finish」ボタンを押下します。
Android Studioが必要なファイルのダウンロードやビルドなどを開始して、忙しそうなので、落ち着くまで待ちましょう。下記のように、プロジェクトファイル(appやGradle Scrips)などが表示されて、左下にfinishが表示されるとよいと思います。
Android Libraryを作成するためのモジュールを追加する
Android Libraryを作成するためのモジュールを追加します。
Fileメニューから「Project Structure...」を実行します。
「Modules」を選択し、「+」(New Module)ボタンを押下します。
「Android Library」を選択し、Module Nameを入力しPackage nameを確認して、「Finish」ボタンを押下します。
項目名 | 設定値 | 用途 |
---|---|---|
Module name | androidlib | Package nameに反映されます |
Package name | com.footinglow.androidlib | 後でAndroid manifest.xmlで使用します |
「Finish」ボタンを押下すると、gitに追加するファイルの確認ダイアログが表示されます。確認して、「Add」ボタンを押下します。
「androidlib」が追加されました。
プロジェクトエクスプローラでも「androidlib」のフォルダを確認できます。Gradel Scriptsにも「build.gradle(Module:androidlib)が追加されました。
不要な「app」を削除する
今回は、アプリケーションモジュール「app」は不要なので削除します。
Fileメニューの「Project Structure...」を実行します。Modulesを選択後、「app」を選択して「-」(Remove Module)ボタンを押下します。
削除されました。
プロジェクトエクスプローラから「app」フォルダとGradel Scriptsの「build.gradel(Module app)も削除されました。
Android Libraryに、Godot Engine Libraryを追加する
GodotからAndroid Libraryを呼び出すためには、「Godot Engine Libary」をAndroid Libraryにリンクする必要があります。使用するGodotのバージョンに対応しているものをダウンロードしましょう。
今回、Godot 4.1.1stableを使用しているため、「You can find previous releases in the download archive.」のリンクから4.1.1-stableのリンクに行きます。
最初表示されていませんが、「Show all downloads」をクリックすると「AAR library
Android plugins · Java · Kotlin」が表示されます。クリックしてダウンロードします。
ファイル名はgodot-lib.4.1.1.stable.template_release.aarでした。
ダウンロードしたGodot Engine LibraryをAndroid Libraryに移動する
ダウンロードしたGodot Engine Libraryのgodot-lib.4.1.1.stable.template_release.aarを先ほどAndroid Studioで作成したプロジェクトのフォルダ内に移動して、関連付けをします。
移動先のフォルダを表示するためにAndroid Studioのプロジェクトエクスプローラの「Android ▽」をクリックして、「Project Files」の表示に変更します。
追加したAndroid Library Moduleの「androidlib」の下にある「libs」が見えるようにします。
Windowsのエクスプローラを開いて、godot-lib.4.1.1.stable.template_release.aarファイルを「androidlib/libs」にドラッグして移動しましょう。
ドラッグするとダイアログが表示されるので、「Refactor」ボタンを押下するとファイルの移動が完了します。
Android LibraryモジュールにGodot Engine Libraryへの依存関係を追加する
Android Libraryモジュール「androidlib」に、先ほど移動したGodot Engine Libraryのgodot-lib.4.1.1.stable.template_release.aarへの依存関係を設定します。
Projectメニューから「Project Structure...」を実行します。
Dependencies、androidlibと選択し、Declared Dependenciesの下の「+」(Add Dependency)ボタンを押下します。
「2 JAR/AAR Dependency」を実行します。
step 1に「libs/godot-lib.4.1.2.stable.template_release.aar」を手入力します。Step 2はimplementationのままで、OKボタンを押下する。(本当はStep 2はcompileOnlyにしたいが選択肢にない)
プロジェクトエクスプローラの表示が「Project Files」のままの場合、「Android」に戻します。
プロジェクトエクスプローラのbuild.gradle(Module:androidlib)を開きます。
先ほど追加した依存関係がそのまま
「implementation files('libs/godot-lib.4.1.2.stable.template_release.aar')」とあるので、「implementation」を「compileOnly」に変更します。
org.godotengine.godot.plugin.GodotPluginの派生クラスを追加する
org.godotengine.godot.plugin.GodotPluginの派生クラスを追加します。
そうするとGodotで実行時する時にSingletonでインスタンス化されます。
パッケージを右クリックして、
NewからJava Classを選択します。
クラス名を入力します。後でパッケージ名付きにしてAndroid Manigest.xmlに設定します。
項目名 | 設定値 | 用途 |
---|---|---|
Class名 | GodotExtendedPlugin | 後でAndroidManifest.xmlに設定します |
package com.footinglow.androidlib;
public class GodotExtendedPlugin{
}
「org.godotengine.godot.plugin.GodotPlugin」の派生クラスに変更しましょう。
package com.footinglow.androidlib;
public class GodotExtendedPlugin extends org.godotengine.godot.plugin.GodotPlugin{
}
2つのエラーが指摘されます。Constructorが無い、と、getPluginName()の実装が無い、です。
クラス定義のあたりを右クリックして、Generateを実行しましょう。
「Constructor」を実行しましょう。
同様にGenerateを実行して、「Implement Methods...」を実行します。
「getPluginName():String」を選択した状態でOKを押下します。
下記のようになります。
またgetPluginNameメソッドのreturn文字列は、GodotのGDScriptからプラグインを検索する時の識別子になるので、適切な名称を設定しましょう。ここではクラス名と同じにしました。
項目名 | 設定値 | 用途 |
---|---|---|
getPluginNameメソッドのreturn文字列 | "GodotExtendedPlugin" | GDScriptからPluginを検索する時の文字列識別子 |
package com.footinglow.androidlib;
import androidx.annotation.NonNull;
import org.godotengine.godot.Godot;
public class GodotExtendedPlugin extends org.godotengine.godot.plugin.GodotPlugin{
public GodotExtendedPlugin(Godot godot) {
super(godot);
}
@NonNull
@Override
public String getPluginName() {
return "GodotExtendedPlugin";
}
}
GodotのGDScriptから実行するメソッドを定義する
GodotのGDScriptから実行するメソッドを定義しましょう。
GDScriptから呼び出したいメソッドは「@UsedByGodot」でアノテーションする必要がありますので、「import org.godotengine.godot.plugin.UsedByGodot;」を追加しましょう。
あとは動作確認用に固定の文字列を返すgetMyMessageメソッドを追加しましょう。
package com.footinglow.androidlib;
import androidx.annotation.NonNull;
import org.godotengine.godot.Godot;
import org.godotengine.godot.plugin.UsedByGodot;
public class GodotExtendedPlugin extends org.godotengine.godot.plugin.GodotPlugin{
public GodotExtendedPlugin(Godot godot) {
super(godot);
}
@NonNull
@Override
public String getPluginName() {
return "GodotExtendedPlugin";
}
@UsedByGodot
public String getMyMessage() {
return "Hello, Android Plugin!";
}
}
AndroidManigest.xmlにPluginがロードするクラスを定義する
AndroidManifest.xmlにAndroid Pluginがロードするクラス名を定義します。
android:nameは「org.godotengine.plugin.v1.」までがとても大事です。Godot Pluginは、おそらくandroid:nameでプラグイン対象かを判断していると思います。
android:valueは追加したクラスをパッケージ名付きで設定します。
項目名 | 設定値 | 用途 |
---|---|---|
android:name | org.godotengine.plugin.v1.GodotExtendedPlugin | android:nameは「org.godotengine.plugin.v1.」までが必須。その後の名称は何でもよさそう |
android:value | com.footinglow.androidlib.GodotExtendedPlugin | Pluginがロードするクラスを正しく設定する |
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<meta-data
android:name="org.godotengine.plugin.v1.GodotExtendedPlugin"
android:value="com.footinglow.androidlib.GodotExtendedPlugin" />
</application>
</manifest>
Android Library AARファイルの出力を確認する
プロジェクトエクスプローラの表示を「Project Files」に変更すると、Android Library AARファイルが、build/outputs/aar/androidlib-debug.aarに出力されます。
出力されていない場合は、Buildログでエラーが無いか確認しましょう。
「Build」メニューからRebuild Projectを実行してみましょう。
GodotプロジェクトにAndroid Libraryをインストールする
出力したAndroid Libraryを、Godotサンプルプロジェクトにインストールします。
Godotサンプルプロジェクトを作成する
Android Libraryから取得した文字列をコントロールに表示するサンプルプロジェクトを作成します。
Godotが起動したら、シーン内の「ユーザインタフェース」ボタンを押下して、Contolをトップノードします。子ノードにlabelを追加します。
Controlにスクリプトをアタッチして下記のスクリプトを追加しましょう
extends Control
func _ready():
if Engine.has_singleton("GodotExtendedPlugin"):
var singleton = Engine.get_singleton("GodotExtendedPlugin")
$Label.text = singleton.getMyMessage()
else:
$Label.text = "No Plugin"
実行して、「No Plugin」と表示されればOKです。
Androidビルドテンプレートのインストール
プロジェクトメニューから「Androidビルドテンプレートのインストール」を実行します。
完了すると、Godotプロジェクトがあるフォルダに「android」ディレクトリが作成されます。
Android Libraryをインストールする
Androidライブラリのプロジェクトフォルダの、androidlib\build\outputs\aar\androidlib-debug.aarを、Godotプロジェクトフォルダのandroid/pluginsにコピーします。
同じフォルダに、拡張子「.gdap」のテキストファイルを作成し、Godot EngineにAndroidプラグインを認識させます。ファイル名は、aarファイル名に、「.gdap」拡張子をつけて、「androidlib-debug.aar.gdap」にしました。
中は下記のようにします。[dependencies]に設定するものは、今回はありません。
「name=」の後ろに設定した文字列が、GodotのAndroidエクスポートのオプションのプラグインカテゴリに表示されます。
[config]
name="GodotExtendedPlugin"
binary_type="local"
binary="androidlib-debug.aar"
[dependencies]
項目名 | 設定値 | 用途 |
---|---|---|
name | GodotExtendedPlugin | GodotのAndroidエクスポート内のプラグインオプション表示名 |
binary_type | local | localで良いと思います |
binary | androidlib-debug.aar | Android Libraryのファイル名 |
Androidエクスポートするための設定
プロジェクトメニューからプロジェクト設定を開いて、右の方にある「Advanced Settings」を有効にします。レンダリングのテクスチャの「Import ETC2 ASTC」にチェックを入れます。
保存して再起動ボタンを押下します。
Androidエクスポートの設定
「プロジェクト」メニューの「エクスポート...」を実行します。「追加...」からAndroidを選択します。
gdapファイルが正しいと、「プラグイン」にgdapファイルで設定したnameが表示されるので、チェックを入れて有効にします。
プラグインを使用する場合は、Gradle Buildの「Use Gradle Build」のチェックを有効にする必要があります。
Androidスマホで実行
apkファイルをAndroidスマホにインストールして実行して、「Hello, Android Plugin!」と表示されれば成功です。
終わりに
GodotでAndroid Pluginを使用するとAndroidの機能を使えるようになり自由度が高くなります。
アプリ内課金、広告、Google Play Consoleのリーダーズボードなどを使う場合はAndroidプラグインを使うことになりそうです。
デメリットとしては、当たり前ですがAndroid専用になるということ。マルチプラットフォームを前提としている場合は、なるべくAndroidプラグインへの依存が最小になるように設計しましょう。
github
ソースファイルはこちらです。
以上です。