插件提交指南

本指南适用于已准备好向 plugins.solar2d.com 上的 Solar2D 免费插件目录提交插件的第三方插件开发者。或者,您也可以将插件提交至 Solar2D 插件市场,请参阅 资产打包指南

如果您不熟悉插件这一概念以及如何创建插件,请参阅我们的 插件 指南。

分发

插件的分发根据其将被用于何种产品而有所不同。

Solar2D

您的插件将实时托管在 Corona 的构建服务器上,供所有 Solar2D 开发者立即使用。当 Solar2D 开发者创建一个需要您的插件的项目时,构建服务器将在构建过程中自动集成插件。

Solar2D Native

Solar2D Native 开发者必须在 native 项目中包含插件。根据目标平台,这可以采用多种形式:静态库 (iOS)、共享库 (macOS/Windows/Android) 或.jar 文件 (Android).

用于提交的打包

纯 Lua

如果您拥有使用 纯 Lua 编写插件(仅限 Lua 代码),请参阅 创建 Lua 插件

Native/混合

如果您的插件是用 native 代码或 hybrid native + Lua 编写的,应当通过已与您共享的 Bitbucket 仓库提交插件(该仓库的结构必须遵循特定的格式)。当您的仓库有更新时,您可以生成一个拉取请求。

为了帮助您开始,我们创建了一个 插件提交模板,其中包含 starter 文件,但缺少 plugins 二进制目录。从本质上讲,您应该使用以下结构打包您的 native/hybrid 插件文件

  • metadata.json — 有关您插件的核心信息;请参阅以下 metadata.json
  • plugins/ 
    • ${VERSION}/ — 构建版本,例如 2024.3703;请参阅以下 版本目标
      • android/ 
        • .jar.so 二进制文件。
        • metadata.lua — 请参阅以下 metadata.lua
        • resources/ 
          • package.txt — 其中含有要为其生成 R 文件的包的名称。
          • assets/ — 此文件夹包含要添加到 assets 文件夹的文件,并且可以通过资产管理器检索。
          • res/ — 此文件夹包含要放到 res 文件夹的文件,可通过 getIdentifier 或通过访问包的 R 文件下的 package.txt 访问。
      • iphone/ 
        • .a 二进制(ARMv7)。
        • metadata.lua — 请参阅以下 metadata.lua
        • resources/ 此文件夹将包含应用程序中所需的所有资源。它相对于根应用程序目录。
      • iphone-sim/ 
        • .a 二进制(i386)。
        • metadata.lua — 请参阅以下 metadata.lua
        • resources/ — 此文件夹将包含应用程序中所需的所有资源。它相对于根应用程序目录。
      • mac-sim/ 
        • .dylib 二进制或 Lua 插件。
      • win32-sim/ 
        • .dll 二进制或 Lua 插件。

metadata.json

此 JSON 文件包含发行者的信息、插件在 Lua 中的名称以及其他相关信息,例如:

{
    "contact": "[email protected]",
    "url": "http://www.mycompany.com",
    "pluginName": "plugin.mylibrary",
    "publisherId": "com.mycompany"
}

metadata.lua

对于 本机/混合 插件,每个平台 metadata.lua 文件描述插件二进制文件属性。对于 Android、iOS 和 iOS 模拟器,需要此文件。

  • 对于 Android,需要指定二进制文件的格式。目前支持 .jar.so。此外,还可以指定需要修改以支持插件的 AndroidManifest.xml 文件中的元素。

如果您正在 开发插件 并依赖于 Android 支持库Google Play 服务,请阅读我们的 Android 依赖项集成 指南。

  • 对于 iOSiOS 模拟器metadata.lua 文件应该相同。在这两种情况下,都需要指定二进制文件的格式。目前仅支持静态库(.a)。

  • 可以通过 coronaManifest 部分声明依赖项。这些插件将在 Corona 模拟器构建期间下载并与您自己的插件捆绑在一起。

  • 插件提交模板 提供存根版本。以下是一些示例

-- Android
local metadata =
{
    plugin =
    {
        format = "jar",
        manifest = 
        {
            permissions = {},
            usesPermissions =
            {
                "android.permission.INTERNET",
                "android.permission.ACCESS_NETWORK_STATE",
                "android.permission.READ_PHONE_STATE",
            },
            usesFeatures = {},
            applicationChildElements =
            {
                -- Array of strings
                [[
                    <activity android:name="com.mycompany.MyActivity"
                    android:configChanges="keyboard|keyboardHidden"/>
                ]],
            },
        },
    },
    coronaManifest = {
        dependencies = {
            ["shared.memoryBitmap"] = "com.coronalabs",
        },
    },
}

return metadata
-- iOS / iOS Simulator
local metadata =
{
    plugin =
    {
        format = "staticLibrary",

        -- This is the name without the "lib" prefix
        -- In this case, the static library is called "libplugin_openudid.a"
        staticLibs = { "plugin_openudid", },

        frameworks = {},
        frameworksOptional = {},
    },
    coronaManifest = {
        dependencies = {
            ["shared.memoryBitmap"] = "com.coronalabs",
        },
    },
}

return metadata
注意

对于 iOS 框架,Corona 会自动链接到以下框架。如果需要链接到其他框架,可以在 frameworks 表中将它们指定为必需的,或在 frameworksOptional 表中将它们指定为可选(弱链接)。指定时,请省略 .framework 扩展名。

  • 通讯录
  • AddressBookUI
  • 资产库
  • AudioToolbox
  • AVFoundation
  • CFNetwork
  • CoreGraphics
  • CoreLocation
  • CoreMedia
  • CoreMotion
  • 基础
  • 游戏中心
  • iAd
  • ImageIO
  • MapKit
  • MediaPlayer
  • MessageUI
  • MobileCoreServices
  • OpenAL
  • OpenGLES
  • 照片
  • QuartzCore
  • 安全
  • StoreKit
  • SystemConfiguration
  • UIKit

此外,为了向后兼容,Corona 会弱链接到 AccountsAdSupportSocialTwitter 框架。

Android 资源

对于 Android,资源可以在构建后放入生成的 .apk 中的 assetsres 目录中。

要将资源打包到 assets 目录中,请将资源放入下面指定的 assets 文件夹中。该目录结构将一直保存在构建过程中。

  • plugins/ 
    • ${VERSION}/ — 构建版本,例如 2024.3703;请参阅以下 版本目标
      • android/ 
        • resources/ 
          • assets/ — 此文件夹包含要添加到 assets 文件夹的文件,并且可以通过资产管理器检索。

要将资源打包到 res 目录中,请将资源放入下面指定的 res 文件夹中。该 res 文件夹可以包含子文件夹,这些子文件夹是本机 Android 构建中的相同文件夹,例如 drawablelayout 等。

  • plugins/ 
    • ${VERSION}/ — 构建版本,例如 2024.3703;请参阅以下 版本目标
      • android/ 
        • resources/ 
          • res/ — 此文件夹包含要放到 res 文件夹的文件,可通过 getIdentifier 或通过访问包的 R 文件下的 package.txt 访问。

iOS 资源

若要将资源包含在 .app 捆绑包中,请将其放入下面指出的 resources 文件夹中。这些资源将相对于基本目录添加到捆绑包中。例如,如果您将 example.png 放入 resources 文件夹中,那么它将像 example.app/example.png 一样被包含。

  • plugins/ 
    • ${VERSION}/ — 构建版本,例如 2024.3703;请参阅以下 版本目标
      • iphone/ 
        • resources/ 此文件夹将包含应用程序中所需的所有资源。它相对于根应用程序目录。
      • iphone-sim/ 
        • resources/ — 此文件夹将包含应用程序中所需的所有资源。它相对于根应用程序目录。

版本目标

插件发布到 Corona 的服务器时,您必须指定最低编译版本用于所部署插件的 Solar2D。此编译版本将控制插件的可用性——具体地说,开发者需要在设备编译中以及在可用的情况下在 Corona 模拟器中使用 Solar2D 的该版本(或更高版本)以便使用插件。

例如,如果您希望您的插件在编译 2024.3703 或更高版本中得到支持,您应按照上面所示的目录结构为 ${VERSION} 使用 2024.3703。然后,在您的文档中或其他地方,告知开发者安装 Solar2D 版本 2024.3703 或更高版本以访问该插件。

在编译插件二进制文件时,您应使用相应的 Solar2D Native 版本。

选择版本

对于新插件,我们强烈建议您支持最新的公开版本。这可确保您的插件可供尽可能最广泛的用户使用。

多个版本

通常情况下,当您更新插件二进制文件时,您只需重新提交该插件。但是,偶尔会出现插件较新版本破坏向后兼容性,或者您的更新插件依赖于较新 Solar2D 编译 中提供的新的功能的情况。

在这种情况下,您应部署一个单独的插件二进制文件。该二进制文件将对应于 Solar2D 的不同的/较新编译版本。然后,开发者可以轻松获取该版本来访问插件的较新版本。按照这种方式,您可以保留旧版本插件二进制文件以保持向后兼容性。

常见问题解答

我是否需要为尚未得到支持的平台,例如 Windows 和 macOS,创建插件?

至少,您需要为所有平台提供一个 Lua 插件存根,包括 Windows 和 macOS 的版本。这些存根应允许 Solar2D 开发人员像在受完整支持的平台上一样进行调用。可在此处找到一个示例 Lua 存根 here

我已为特定平台上传了一个插件。我应在哪里添加用于其他平台的插件?

在插件文件夹的编译版本下,您应在名为 androidiphoneiphone-sim, mac-simwin32-sim

的文件夹中提供插件实现。 .

我该如何为 Corona 模拟器生成 .dll.dylib 文件?

如果插件没有面向 Windows 或 macOS 的实现,我们建议创建 Lua 存根文件(见上文)。

如果您希望提供模拟器插件实现,您需要使用 Visual Studio(Windows)或 Xcode(macOS)。可在此处找到一些有用的指南

为什么同时存在 iphoneiphone-sim 文件夹?

提交插件时应提交两个版本。iphone 文件夹应包含 ARMv7 插件,iphone-sim文件夹应包含 i386 插件。这将确保在 iOS 模拟器和物理设备上都可使用该插件。

我应该使用 Android NDK 的哪个版本来创建本机库 (.so)?

应使用标记为“android-ndk-r10d”的 Android NDK 构建本机库 (.so) 插件。

如何测试我的插件?

可以通过链接静态库 (iOS) 来使用 Solar2D Native 测试插件,或通过将库包含在项目的 libs 目录中(Android)来测试插件。在进行初始测试之后,您需要将二进制文件提交给 Corona Labs,以使用 Solar2D 进行测试。