创建Android插件

前言

Android插件是通过挖掘Android平台和生态系统提供的功能来扩展Godot引擎功能的强大工具. 移动游戏货币化就是这样一个例子, 因为它所需要的功能和能力并不属于游戏引擎的核心功能集:

  • 分析
  • 应用内购买
  • 收据验证
  • 安装跟踪
  • 广告
  • 视频广告
  • 交叉推广
  • 游戏中的软硬货币
  • 促销代码
  • A / B测试
  • 登录
  • 云保存
  • 排行榜和分数
  • 用户支持和反馈
  • 发布到Facebook,Twitter等.
  • 推送通知

    Android 插件

    v1 , 是现代Godot Android生态系统的起点. 注意: 在Godot 4.0中, 以前的系统将被完全废弃和删除. 自定义构建环境. Android 归档库 ( aar 归档文件), 其注意事项如下:
  • godot-lib.<version>.<status>.aar). 每一个Godot版本都有一个稳定的版本, 可以在 Godot 下载页面 .
  • <meta-data> 标签.

    创建Android插件

    前提条件: Android Studio 强烈建议作为创建Android插件的IDE使用. 下面的说明假设你使用的是Android Studio.
  1. 这些说明 为你的插件创建一个Android库模块.
  2. 将Godot引擎库作为依赖项添加到插件模块:
    • Godot 下载页 下载 Godot 引擎库( godot-lib.<版本>.<状态>.aar ,例如 godot-lib.4.0.stable.aar )。
  • 这些说明 来添加Godot引擎库作为你的插件的依赖.
  • build.gradle 文件中, 将Godot引擎库的依赖行 implementation 改为 compileOnly .

  • Godot 下载页 下载 Godot 引擎库( godot-lib.<版本>.<状态>.aar ,例如 godot-lib.3.2.2.stable.aar )。

  1. AndroidManifest.xml 文件:
    • AndroidManifest.xml 文件.
  • <application></application> 不见了, 请添加该标签.
  • <application> 标签中,添加一个 <meta-data> 标签设置,如下所示:
  1. <meta-data android:name="org.godotengine.plugin.v1.[PluginName]" android:value="[plugin.init.ClassFullName]" />

PluginName 是插件的名称, plugin.init.ClassFullName 是插件加载类的全称(包+类名).

  1. gradlew build 命令来生成插件的 aar 文件. 构建过程中可能会同时生成 debugreleaseaar 文件. 根据你的需要, 只选择一个版本(通常是 release 的版本)提供给你的用户. aar 文件名符合以下模式: [PluginName]*.aar 其中 PluginName 是PascalCase中的插件名称(例如: GodotPayment.release.aar ).
  2. 创建一个Godot Android插件配置文件, 帮助系统检测并加载你的插件:
    • gdap (例如: MyPlugin.gdap).
  • 配置文件格式如下:
  1. [config]
  1. gradlew build 命令来生成插件的 aar 文件. 构建过程中可能会同时生成 debugreleaseaar 文件. 根据你的需要, 只选择一个版本(通常是 release 的版本)提供给你的用户.

    [dependencies] http://repo.mycompany.com/maven2"\]

  • gdap (例如: MyPlugin.gdap).
  • 配置文件格式如下:
  1. [config]name="MyPlugin"binary_type="local"binary="MyPlugin.aar"[dependencies]local=["local_dep1.aar", "local_dep2.aar"]remote=["example.plugin.android:remote-dep1:0.0.1", "example.plugin.android:remote-dep2:0.0.1"]custom_maven_repos=["http://repo.mycompany.com/maven2"]

config 部分和字段是必须的, 定义如下:

  • name:插件的名称
  • name:插件的名称。
  • binary_type:可以是 localremote。类型影响 binary 字段。
  • binary
    • binary
  • binary_typelocal , 那么这应该是插件 aar 文件的文件路径.

  • MyPlugin.aar ), 在这种情况下, 它是相对于 res://android/plugins 目录的.

  • res://some_path/MyPlugin.aar.
  • binary_typeremote , 那么这应该是一个 remote gradle 二进制 (例如:org.godot.example:my-plugin:0.0.0 )的声明.

dependencies 部分和字段是可选的, 定义如下:

  • local : 包含插件所依赖的本地 .ar 二进制文件的文件路径列表. 与 binary 字段类似(当 binary_typelocal 时), 本地二进制文件的文件路径可以是相对的或绝对的.
  • binary_typeremote ,那么这应该是一个 remote gradle 二进制 (例如: org.godot.example:my-plugin:0.0.0 )的声明。
    • custom_maven_repos : 包含一个URL列表, 指定了插件的依赖关系所需的自定义maven仓库

      加载和使用Android插件

      MyPlugin.gdap )和(如果有的话)它的本地二进制文件(例如: MyPlugin.aar )和对应的依赖移到Godot项目的 res://android/plugins 目录下. res://android/plugins 目录下的所有 .gdap 文件, 并在 Plugins 部分的Android导出预设窗口中显示检测到的可切换插件列表. 从你的脚本中:
      1. if Engine.has_singleton("MyPlugin"): var singleton = Engine.get_singleton("MyPlugin") print(singleton.myPluginFunction("World"))

      捆绑GDNative资源

      aar 文件中,这简化了分发和部署过程:
  • .so )将由 aar 构建系统自动捆绑.
  • *.gdnlib*.gdns 资源文件必须在插件 assets 目录下手动定义. 这些资源相对于 assets 目录的推荐路径应该为 godot/plugin/v1/[PluginName]/ . org.godotengine.godot.plugin.GodotPlugin::getPluginGDNativeLibrariesPaths() 方法,并返回捆绑的 GDNative 库配置文件的路径(*.gdnlib)。这些路径必须是相对于 assets 目录的。在运行时,插件将把这些路径提供给 Godot 核心,核心将使用它们来加载和初始化捆绑的 GDNative 库。

    参考方案

  • Godot Oculus Mobile 插件 - 捆绑的 gdnative 资源
  • Godot Google Play Billing 插件

    故障排除

    Godot在加载时崩溃

    adb logcat 是否存在可能的问题, 然后:
  • voidbooleanintfloatjava.lang.Stringorg.godotengine.godot.Dictionaryint[]byte[]float[]java.lang.String[]
  • 暂时不支持更复杂的数据类型.