LuaJ和Android:无法绑定类

use*_*774 2 java eclipse lua android libgdx

我目前正在使用LibGDX框架在Java中编写游戏引擎.几个月以来,我已成功使用LuaJ 3.0和我的引擎.我在使用Android(在两个设备上测试)或桌面(在Eclipse内外)上运行脚本时没有遇到任何问题.

但是,当我今天尝试部署到Android时,我收到以下错误:

org.luaj.vm2.LuaError: script:2 vm error: java.lang.ClassNotFoundException: com.javamon.console.ScriptPlayerCreate
Run Code Online (Sandbox Code Playgroud)

导致此错误的脚本行是:

Result = luajava.bindClass("com.javamon.console.ScriptPlayerCreate")
Run Code Online (Sandbox Code Playgroud)

这与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)
Run Code Online (Sandbox Code Playgroud)

困扰我的是最后一行.ScriptPlayerCreate肯定存在 - 它正在运行产生错误的脚本!

我尝试过的事情:

  • 尝试不同版本的LuaJ
  • 绑定com.javamon包中的不同类(同样的问题)
  • 更新我的ADT/SDK插件
  • 在Eclipse中清理/重建项目
  • "重新开始"(使用GUI工具创建新的LibGDX项目,并手动导入我的源文件)
  • 检查classes.dex- ScriptPlayerCreate肯定在那里
  • 在单独的Android设备上测试(Moto X和Incredible 2)

我想重申一下,我已成功使用LuaJ和Android 几个月没有发生任何事故.此外,自从上次(成功)Android部署以来,我没有更改脚本引擎.

UPDATE

尝试恢复到我的应用程序和Eclipse的备份版本后,问题仍然存在 - 即使在另一台计算机上也是如此.我开始怀疑luajava.bindClass()不知道如何解释内容classes.dex,而是搜索实际的类文件.

当我尝试重新编译一些备份版本时,我注意到重新编译的版本几乎总是比备份文件 classes.dex.使用Eclipse的/ Android编译器可能有些错误或已经改变了?

我尝试手动将类文件插入到APK中的com/javamon/console /文件夹中,但当然会弄乱文件的完整性,即使重新签名后该应用程序也无法加载.有任何想法吗?

小智 5

我遇到了类似的问题,我会解决它

LuaJavaLib.java:202

原始返回Class.forName(name,true,ClassLoader.getSystemClassLoader());

更改为返回Class.forName(name,true,Thread.currentThread().getContextClassLoader());