【发布时间】:2014-05-26 09:22:46
【问题描述】:
我目前正在使用 LibGDX 框架用 Java 编写游戏引擎。几个月来,我已经成功地将 LuaJ 3.0 与我的引擎一起使用。让脚本在 Android(在两台设备上测试)或桌面(进出 Eclipse)上运行没有问题。
但是,我今天尝试部署到 Android 时,出现以下错误:
org.luaj.vm2.LuaError: script:2 vm error: java.lang.ClassNotFoundException: com.javamon.console.ScriptPlayerCreate
导致此错误的脚本行是:
Result = luajava.bindClass("com.javamon.console.ScriptPlayerCreate")
这与在 Android 上“未找到”的类在印刷上完全相同。
如果我尝试绑定常规 java 类,例如 java.lang.ClassNotFoundException,我不会收到任何错误。但是,桌面版本不会出现此错误,无论是从 Eclipse 中运行还是通过可运行的 *.jar 运行。
这是从 LogCat 检索到的堆栈跟踪:
org.luaj.vm2.LuaError: script:2 vm error: java.lang.ClassNotFoundException: com.javamon.console.ScriptPlayerCreate
at org.luaj.vm2.lib.jse.LuajavaLib.invoke(Unknown Source)
at org.luaj.vm2.lib.VarArgFunction.call(Unknown Source)
at org.luaj.vm2.LuaClosure.execute(Unknown Source)
at org.luaj.vm2.LuaClosure.call(Unknown Source)
at com.javamon.console.Script.runFunction(Script.java:91)
at com.javamon.console.Script.runFunction(Script.java:96)
at com.javamon.console.ScriptPlayerCreate.run(ScriptPlayerCreate.java:39)
令我困扰的是最后一行。 ScriptPlayerCreate 确实存在 - 它正在运行产生错误的脚本!
我尝试过的事情:
- 尝试不同版本的 LuaJ
- 在
com.javamon包中绑定不同的类(同样的问题) - 更新我的 ADT/SDK 插件
- 在 Eclipse 中清理/重建项目
- “重新开始”(使用 GUI 工具创建新的 LibGDX 项目,并手动导入我的源文件)
- 检查
classes.dex--ScriptPlayerCreate肯定存在 - 在不同的 Android 设备(Moto X 和 Incredible 2)上进行测试
我想重申一下,我已经成功地将 LuaJ 与 Android 一起使用了几个月,没有发生任何事故。此外,自从我上次(成功)部署 Android 以来,我没有更改我的脚本引擎。
更新
在尝试恢复到我的应用程序和 Eclipse 的备份版本后,问题仍然存在——即使在另一台计算机上也是如此。 我开始怀疑luajava.bindClass() 不知道如何解释classes.dex 的内容,而是在搜索实际的类文件。
当我尝试重新编译一些备份版本时,我注意到重新编译的版本几乎总是有一个更小的 classes.dex 文件比备份。 Eclipse/Android 的编译器可能有问题或发生了变化?
我尝试手动将类文件插入 APK 中的 com/javamon/console/ 文件夹,但这当然会破坏文件完整性,即使重新签名后应用程序也不会加载。有什么想法吗?
【问题讨论】:
标签: java android eclipse lua libgdx