AndroLua在Lollipop上:JNI检测到应用错误:无法调用静态int org.keplerproject.luajava.LuaJavaAPI.javaNew(int,java.lang.Class)

我希望在我的Android应用程序中使用AndroLua作为库。

在Android 5.x(棒棒糖)之前的版本都很好,但是在Lollipop下,如果我调用juajava.new lua功能,我的应用程序将崩溃。

logcat 显示

JNI DETECTED ERROR IN APPLICATION: can't call static int org.keplerproject.luajava.LuaJavaAPI.javaNew(int, java.lang.Class) on class java.lang.Class<java.lang.Class>

我该如何解决这个问题? 或者,有替代方法可以在Android上运行LUA吗?

点赞
用户72944
用户72944

https://github.com/jasonsantos/luajava/issues/10 修复了以下的问题:

在 Android ART 上调用 luajava.new(...) 会产生以下错误: A/art: art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: can't call static int org.keplerproject.luajava.LuaJavaAPI.javaNew(int, java.lang.Class) with class java.lang.Class A/art: art/runtime/java_vm_ext.cc:410] in call to CallStaticIntMethod

经过代码审查,我发现了问题。在 luajava.c 的第 1377 行:

ret = (*javaEnv)->CallStaticIntMethod(javaEnv, clazz, method, (jint)stateIndex, classInstance);

这里的 clazz 不是我们要的对象。应该改为:

ret = (*javaEnv)->CallStaticIntMethod(javaEnv, luajava_api_class, method, (jint)stateIndex, classInstance);

另外,我认为第 1371 行:

if (clazz == NULL || method == NULL)

应该改为:

if (luajava_api_class == NULL || method == NULL)

Nir.

2017-12-20 08:40:08