/Godot-Android-Plugin-Template

This repository serves as a quickstart template for building a Godot Android plugin for Godot 4.2+.

Primary LanguageGDScriptMIT LicenseMIT

Godot Android Plugin Template

This repository serves as a quickstart template for building a Godot Android plugin for Godot 4.2+.

Contents

Usage

Note: Android Studio is the recommended IDE for developing Godot Android plugins. You can install the latest version from https://developer.android.com/studio.

To use this template, log in to github and click the green "Use this template" button at the top of the repository page. This will let you create a copy of this repository with a clean git history.

Configuring the template

After cloning your own copy to your local machine, configure the project as needed. Several TODO have been added to the project to help identify where changes are needed; here's an overview of the minimum set of modifications needed:

Building the configured Android plugin

  • In a terminal window, navigate to the project's root directory and run the following command:
./gradlew assemble
  • On successful completion of the build, the output files can be found in plugin/demo/addons

Testing the Android plugin

You can use the included Godot demo project to test the built Android plugin

  • Open the demo in Godot (4.2 or higher)
  • Navigate to Project -> Project Settings... -> Plugins, and ensure the plugin is enabled
  • Install the Godot Android build template by clicking on Project -> Install Android Build Template...
  • Open plugin/demo/main.gd and update the logic as needed to reference your plugin and its methods
  • Connect an Android device to your machine and run the demo on it

Tips

Additional dependencies added to plugin/build.gradle.kts should be added to the _get_android_dependencies function in plugin/export_scripts_template/export_plugin.gd.

Simplify access to the exposed Java / Kotlin APIs

To make it easier to access the exposed Java / Kotlin APIs in the Godot Editor, it's recommended to provide one (or multiple) gdscript wrapper class(es) for your plugin users to interface with.

For example:

class_name PluginInterface extends Object

## Interface used to access the functionality provided by this plugin

var _plugin_name = "GDExtensionAndroidPluginTemplate"
var _plugin_singleton

func _init():
	if Engine.has_singleton(_plugin_name):
		_plugin_singleton = Engine.get_singleton(_plugin_name)
	else:
		printerr("Initialization error: unable to access the java logic")

## Shows a 'Hello World' toast.
func helloWorld():
	if _plugin_singleton:
		_plugin_singleton.helloWorld()
	else:
		printerr("Initialization error")