1
1

Godot4.1.1でAndroidPlugin V1を動かしてみた

Last updated at Posted at 2023-10-15

 Android StudioでGodot Androidプラグイン(v1アーキテクチャ)用Android Libraryを作成して、Godotのサンプルプロジェクトに組み込み、実行するまでの手順をまとめました。

Godot 4.2では、Android Pluginがバージョンアップして、v2アーキテクチャになるようです。

名前の関係

 GodotのAndroidプラグイン用のAndroid Libraryを生成して使うときの、ファイルと名前の関係を整理しました。
 黄色の矢印は、元の名前を、矢印先に設定するという意味です。
2023-10-15 (10).png
①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を作成する

「New Project」ボタンを押下します。
2023-10-14 (1).png

「No Activity」を選択します。今回はActivityは使用せず、しかも後で削除するので何でも良いです。
2023-10-14 (3).png

新規プロジェクトのNameとPackage name、Save locationなどを設定して、「Finish」ボタンを押下します。

2023-10-14 (2).png

Android Studioが必要なファイルのダウンロードやビルドなどを開始して、忙しそうなので、落ち着くまで待ちましょう。下記のように、プロジェクトファイル(appやGradle Scrips)などが表示されて、左下にfinishが表示されるとよいと思います。
2023-10-14 (5).png

Android Libraryを作成するためのモジュールを追加する

 Android Libraryを作成するためのモジュールを追加します。

 Fileメニューから「Project Structure...」を実行します。
2023-10-14 (6).png
「Modules」を選択し、「+」(New Module)ボタンを押下します。
2023-10-14 (7).png
「Android Library」を選択し、Module Nameを入力しPackage nameを確認して、「Finish」ボタンを押下します。

項目名 設定値 用途
Module name androidlib Package nameに反映されます
Package name com.footinglow.androidlib 後でAndroid manifest.xmlで使用します

2023-10-14 (8).png
「Finish」ボタンを押下すると、gitに追加するファイルの確認ダイアログが表示されます。確認して、「Add」ボタンを押下します。
2023-10-14 (9).png
「androidlib」が追加されました。
2023-10-14 (10).png
プロジェクトエクスプローラでも「androidlib」のフォルダを確認できます。Gradel Scriptsにも「build.gradle(Module:androidlib)が追加されました。
2023-10-14 (11).png

不要な「app」を削除する

 今回は、アプリケーションモジュール「app」は不要なので削除します。
 Fileメニューの「Project Structure...」を実行します。Modulesを選択後、「app」を選択して「-」(Remove Module)ボタンを押下します。

2023-10-14 (12).png
削除されました。
2023-10-14 (13).png
プロジェクトエクスプローラから「app」フォルダとGradel Scriptsの「build.gradel(Module app)も削除されました。
2023-10-14 (14).png

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」の表示に変更します。
2023-10-14 (16).png
追加したAndroid Library Moduleの「androidlib」の下にある「libs」が見えるようにします。
2023-10-14 (17).png

 Windowsのエクスプローラを開いて、godot-lib.4.1.1.stable.template_release.aarファイルを「androidlib/libs」にドラッグして移動しましょう。
 ドラッグするとダイアログが表示されるので、「Refactor」ボタンを押下するとファイルの移動が完了します。
スクリーンショット (847).png

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)ボタンを押下します。
2023-10-14 (21).png
「2 JAR/AAR Dependency」を実行します。
2023-10-14 (22).png
step 1に「libs/godot-lib.4.1.2.stable.template_release.aar」を手入力します。Step 2はimplementationのままで、OKボタンを押下する。(本当はStep 2はcompileOnlyにしたいが選択肢にない)
2023-10-14 (23).png

 プロジェクトエクスプローラの表示が「Project Files」のままの場合、「Android」に戻します。
2023-10-14 (24).png
プロジェクトエクスプローラのbuild.gradle(Module:androidlib)を開きます。
先ほど追加した依存関係がそのまま
「implementation files('libs/godot-lib.4.1.2.stable.template_release.aar')」とあるので、「implementation」を「compileOnly」に変更します。
2023-10-14 (25).png

org.godotengine.godot.plugin.GodotPluginの派生クラスを追加する

 org.godotengine.godot.plugin.GodotPluginの派生クラスを追加します。
 そうするとGodotで実行時する時にSingletonでインスタンス化されます。

 パッケージを右クリックして、
2023-10-14 (29).png
NewからJava Classを選択します。
2023-10-14 (26).png
クラス名を入力します。後でパッケージ名付きにしてAndroid Manigest.xmlに設定します。

項目名 設定値 用途
Class名 GodotExtendedPlugin 後でAndroidManifest.xmlに設定します

2023-10-14 (28).png
 このように追加されます。

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を実行しましょう。
2023-10-14 (32).png
「Constructor」を実行しましょう。
2023-10-14 (33).png
同様にGenerateを実行して、「Implement Methods...」を実行します。
2023-10-14 (34).png
「getPluginName():String」を選択した状態でOKを押下します。
2023-10-14 (35).png

下記のようになります。
また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がロードするクラス名を定義します。
2023-10-15.png

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に出力されます。
2023-10-15 (1).png
 出力されていない場合は、Buildログでエラーが無いか確認しましょう。
 「Build」メニューからRebuild Projectを実行してみましょう。
2023-10-15 (12).png

GodotプロジェクトにAndroid Libraryをインストールする

出力したAndroid Libraryを、Godotサンプルプロジェクトにインストールします。

Godotサンプルプロジェクトを作成する

 Android Libraryから取得した文字列をコントロールに表示するサンプルプロジェクトを作成します。
2023-10-15 (2).png

 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にコピーします。
2023-10-15 (4).png

 同じフォルダに、拡張子「.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」のチェックを有効にする必要があります。
2023-10-15 (7).png

Androidスマホで実行

 apkファイルをAndroidスマホにインストールして実行して、「Hello, Android Plugin!」と表示されれば成功です。

終わりに

 GodotでAndroid Pluginを使用するとAndroidの機能を使えるようになり自由度が高くなります。
 アプリ内課金、広告、Google Play Consoleのリーダーズボードなどを使う場合はAndroidプラグインを使うことになりそうです。
 デメリットとしては、当たり前ですがAndroid専用になるということ。マルチプラットフォームを前提としている場合は、なるべくAndroidプラグインへの依存が最小になるように設計しましょう。

github

ソースファイルはこちらです。

以上です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1