如何在Java应用程序中运行Lua脚本在Android上?
2012-5-6 15:19:21
收藏:0
阅读:204
评论:3
我正在使用Java开发一个在Android平台上使用Lua脚本的游戏。为了运行这些脚本,我正在使用Java的ScriptEngine类来使用LuaJ。例如:
ScriptEngineManager sem = new ScriptEngineManager();
scriptEngine = sem.getEngineByExtension(".lua");
script = ((Compilable)scriptEngine).compile("some lua here");
然而,显然在Android上不受支持(据我所知,与Android没有拥有完整的JVM有关)。是否有一种方法可以在Android上使用Lua脚本?也许有一个LuaJ的替代品?也许有一种直接使用LuaJ编译和执行Lua脚本的方法(尽管我不知道如何实现)。
FYI,当我在Android上运行这段代码时,我看到了这个错误:
05-06 16:12:32.870: E/dalvikvm(17509): Could not find class 'javax.script.ScriptEngineManager', referenced from method unearth.levels.LevelReader.<init>
05-06 16:12:32.870: W/dalvikvm(17509): VFY: unable to resolve new-instance 787 (Ljavax/script/ScriptEngineManager;) in Lunearth/levels/LevelReader;
05-06 16:12:32.870: D/dalvikvm(17509): VFY: replacing opcode 0x22 at 0x0018
05-06 16:12:32.875: E/dalvikvm(17509): Could not find class 'javax.script.Compilable', referenced from method unearth.levels.LevelReader.parseScript
05-06 16:12:32.875: W/dalvikvm(17509): VFY: unable to resolve check-cast 782 (Ljavax/script/Compilable;) in Lunearth/levels/LevelReader;
05-06 16:12:32.875: D/dalvikvm(17509): VFY: replacing opcode 0x1f at 0x0047
05-06 16:12:32.875: W/dalvikvm(17509): VFY: unable to resolve exception class 788 (Ljavax/script/ScriptException;)
05-06 16:12:32.875: W/dalvikvm(17509): VFY: unable to find exception handler at addr 0x51
05-06 16:12:32.875: W/dalvikvm(17509): VFY: rejected Lunearth/levels/LevelReader;.parseScript (Lorg/w3c/dom/Element;Lunearth/levels/Level;)V
05-06 16:12:32.875: W/dalvikvm(17509): VFY: rejecting opcode 0x0d at 0x0051
05-06 16:12:32.875: W/dalvikvm(17509): VFY: rejected Lunearth/levels/LevelReader;.parseScript (Lorg/w3c/dom/Element;Lunearth/levels/Level;)V
05-06 16:12:32.875: W/dalvikvm(17509): Verifier rejected class Lunearth/levels/LevelReader;
05-06 16:12:32.890: W/dalvikvm(17509): threadid=11: thread exiting with uncaught exception (group=0x40c331f8)
05-06 16:12:32.895: E/AndroidRuntime(17509): FATAL EXCEPTION: GLThread 1062
05-06 16:12:32.895: E/AndroidRuntime(17509): java.lang.VerifyError: unearth/levels/LevelReader
05-06 16:12:32.895: E/AndroidRuntime(17509): at unearth.Game.startGame(Game.java:201)
05-06 16:12:32.895: E/AndroidRuntime(17509): at unearth.Game.update(Game.java:713)
05-06 16:12:32.895: E/AndroidRuntime(17509): at unearth.screens.LoadScreen.update(LoadScreen.java:56)
05-06 16:12:32.895: E/AndroidRuntime(17509): at unearth.UnearthListener.render(UnearthListener.java:71)
05-06 16:12:32.895: E/AndroidRuntime(17509): at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:423)
05-06 16:12:32.895: E/AndroidRuntime(17509): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462)
05-06 16:12:32.895: E/AndroidRuntime(17509): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
05-06 16:12:58.600: D/dalvikvm(17509): GC_CONCURRENT freed 334K, 3% free 16196K/16647K, paused 2ms+6ms
更新:
也许这个项目有一些有用的代码?http://code.google.com/p/android-scripting/
原文链接 https://stackoverflow.com/questions/10471667
点赞
stackoverflow用户221509
注意: 除了使用 LuaJ,也可以使用与使用 NDK 编译的 Android Lua 一起使用的 LuaJava。这使得 Lua 完全可以访问 Java 提供的任何内容。请查看此示例以了解如何入门。
如果您不想操作 NDK,可以在 libs
目录中提供编译的 Lua 5.1.4 和 LuaJava(一个 libluajava.so
文件)。但是,设置起来也相对容易。
2012-05-06 22:30:56
stackoverflow用户382871
想在 Android 上使用 Lua,可以使用 JNLua + Lua 5.2(使用 C 实现)。唯一支持 JSR 223(javax.script)的 Android 端口在这里:https://github.com/danke-sra/jnlua-android
使用此端口,您可以实现您想要的内容:
ScriptEngine scriptEngine = new LuaScriptEngineFactory().getEngine();
scriptEngine.eval("lua statements");
2016-01-20 06:02:45
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
正确。
正确。如果您查看[JavaDocs](http://developer.android.com/reference/packages.html),您会发现`javax.script`不存在于安卓 SDK 中。
那是一个选项。另一个选项是通过 NDK 将 Lua 解释器嵌入您的应用程序,就像这个[示例应用程序](https://github.com/commonsguy/cw-andtuning/tree/master/NDK/LuaInterpreter)中所示。