以下资源将更深入地介绍如何在 Android 上使用 Solar2D Native。
下载并安装 Android Studio,Android 开发的官方 IDE。
在 /Applications/Corona/Native/ 文件夹中,双击 **Setup Corona Native**。这将创建项目模板所需的符号链接。
可以使用模板文件作为起点轻松创建新项目。项目模板位于
/Applications/Corona/Native/Project Template/Native\Project Template要开始一个新项目,请将 App 文件夹复制到所需位置并重命名。启动 Android Studio,点击“打开现有 Android Studio 项目”,然后从复制的 App 模板中选择 android 目录。
请注意,打开App/android
在 App 文件夹的副本中,以下文件/目录是主要关注点
Corona — 此文件夹代表一个经典的 Corona 项目,包含 main.lua、应用程序图标等文件。默认情况下,build.gradle (Module: App)Corona) 中。android — 包含所有app  build.gradle — 这是主要的构建脚本,您还可以在其中设置一些应用程序设置,例如版本和要使用的 SDK 版本。libs/ — 这是放置.jar 插件的位置。src  main  AndroidManifest.xml — 您可以在此处配置应用程序设置,例如名称、权限等。java/ — 这是应用程序的 Java 源文件应放置的位置。由于包是 com.mycompany.app,因此默认情况下文件位于此处。您应该根据指定的包名称进行修改。jniLibs/ — 这是放置.so 插件的位置。plugin - 这是开发 SOlar2D 插件时的主要文件夹。您所有的代码都在这里。对于插件,还有其他一些需要注意的文件和目录build.gradle — 这是创建插件的构建脚本。输出通常是一个 .jar 文件。.jar 文件中只包含位于 plugin/src/main/ 中的文件,无论它们是代码还是资源。如果您有要添加到插件的额外资源(例如,UI),这些资源通常位于 res 目录中(见下文),则会生成一个 aar 文件(如何处理 aar 文件,请参阅构建自托管插件)。libs — 这是放置插件依赖的 (Corona) .jar 插件的位置。.jar 插件应该放在这里。src  main  AndroidManifest.xml — 您可以在此处设置插件的包名称。java  plugin  library  LuaLoader.java — 这是 Android 端 Lua 库 plugin.library 的代码。jniLibs/ — 这是放置.so 插件应该放在这里。res/ — 这是您的 Android 资源所在的位置(即颜色、样式、文本等等)。如果存在此类资源,请记住在您的 build.gradle 中应用插件 'com.android.library' 而不是 'com.android.appication'。以下步骤简要概述了/Applications/Corona/Native/Project Template/App/
android/app/src/main/java/com/mycompany/app/CoronaApplication.java — 在启动时,会实例化 CoronaApplication.java。它添加了一个私有类,用于接收各种main.lua 之前,会调用 onCreate() 方法。此时,OpenGL 已设置完毕,所有 Corona 框架均可用。
Corona/main.lua — 在 Lua 代码中,通过 require() 加载 plugin.library。然后,Corona 引擎将查找名为 plugin.library.LuaLoader 的相应 Java 类并调用它。此类的名称是动态的,使用传递给 require() 的原始库名称作为 LuaLoader 类的包名称构造。LuaLoader 类应实现 JNLua 接口 com.naef.jnlua.JavaFunction。
android/plugin/src/main/java/plugin/library/LuaLoader.java — 当LuaLoader 类路径解析后,将使用默认构造函数实例化该类。然后 Lua 通过 JNLua 调用 invoke() 方法并完成所有繁重的工作,例如创建 Lua 库表、注册 show() 等 Lua 方法,然后将表留在 Lua 堆栈的顶部。
请注意,LuaLoader 类在进程的生存期内只实例化 **一次**,就像 .dll 或 .so 文件通常在进程的生存期内只加载一次一样。另请注意,每次 Lua 状态执行 require() 时都会调用一次 invoke() 方法 — 这对应于每次实例化 CoronaActivity 时调用一次。
要桥接 Lua 和 Java 代码,您将使用 JNLua 提供的功能。这允许您在 Lua 中添加直接调用 Java 的库和函数。
Android 的原生 API 以 JavaDoc 的形式提供。
只需记住通过添加以下行来防止 ProGuard 混淆您的 plugin.your-plugin-name.LuaLoader 类
-keep public class plugin.your-plugin-name.LuaLoader { public *;}
到插件模块中的 proguard-rules.pro 文件中。
如果您正在开发一个插件,它依赖于Android 支持库或Google Play 服务,请阅读我们的Android 依赖项集成指南。
有关在 **Android 6.0** 或更高版本中使用 Android 运行时权限的信息,请阅读我们的Android 运行时权限支持指南。
要从 Android Studio 构建 Solar2D Native 项目,只需使用图标顶栏上的 **运行** 按钮。这将构建您的项目,对其进行签名,并提示您选择部署目标。构建的 .apk 使用您在android → signingConfigsandroid/app/build.gradle 脚本块中指定的密钥库或默认的 debug.keystore(如果没有提供)进行签名。
Android Studio 还有其他几个
构建要在 Web 服务器上发布的插件(因为该插件尚未打算与社区共享),需要几个简单的额外步骤
创建一个用于打包的目录,例如 `package-plugin`。在 `package-plugin` 中创建一个名为 `android` 的文件夹。
创建一个名为 `corona.gradle` 的新 gradle 文件,并将您插件的 `build.gradle` 中的所有依赖项和存储库定义也复制到该文件中。
将 `metadata.lua` 文件也放在 `package-plugin` 目录中
使用一个简单的打包脚本将构建结果复制到此目录中,并调用 zip/tar 程序。例如,在 Mac 上,您可以使用以下行,并将它们放在 shell 脚本 `deploy.sh` 中
#!/bin/bash cp ../../build/outputs/aar/plugin-release.aar . COPYFILE_DISABLE=true tar -czf ../"$(basename "$(pwd)").tgz" --exclude='.[^/]*' ./* scp ../android.tgz "[email protected]:/var/www/YOUR_DOMAIN/plugins"
最后,对于那些将使用您的自托管插件的人,他们必须将位置(`www.YOUR_DOMAIN.de/plugins/android.tgz`)添加到他们的 `build.settings` 中,以便 Corona-Apps 的构建过程可以找到该插件。