将jobjectArray从JNI传递到Android API 21/22上的Java崩溃,但使用API 19

将jobjectArray从JNI传递到Android API 21/22上的Java崩溃,但使用API 19,android,android-ndk,java-native-interface,Android,Android Ndk,Java Native Interface,我使用下面的代码来处理Android和JNI中的JNI数组 然而,我发现返回“jobjectArray”无法在API 21/22(Android 5.0)上完成,但可以在API 19上运行。(安卓4.4) (无法完成表示它在JNI部分返回,但在Java上挂起且没有响应) 下面是我试图在Android应用程序中实现的伪代码 jobjectArray Java_com_test_Simplejni(JNIEnv* env, jobject thisObj) jclass localClass

我使用下面的代码来处理Android和JNI中的JNI数组

然而,我发现返回“jobjectArray”无法在API 21/22(Android 5.0)上完成,但可以在API 19上运行。(安卓4.4) (无法完成表示它在JNI部分返回,但在Java上挂起且没有响应)

下面是我试图在Android应用程序中实现的伪代码

jobjectArray Java_com_test_Simplejni(JNIEnv* env, jobject thisObj)
    jclass localClass = env->FindClass("java/lang/Object");
    jclass objClass = reinterpret_cast<jclass>(env->NewGlobalRef(localClass));
    args = env->NewObjectArray(len, objClass, 0);
    return args;
}
错误消息如下所示:

     String[] Simplejni();
JNI DETECTED ERROR IN APPLICATION: attempt to return an instance of java.lang.Object[] from com.test.Simplejni                
请告知如何调查此问题的任何建议,谢谢

更新:20150427

  • 我尝试simpreturn空jobjectArray,它在Android 4.4中工作,但在Android 5.0中失败(使用相同的代码)
  • 我的IDE是Android Studio

我找到了解决这个问题的方法: 您只需在API 21+上用java对象类替换
java/lang/Object
,例如,
jclass localClass=env->FindClass(“com/example/yourloclass”),,

从日志中,我们可以知道对象类不是JavaLocalObject类的实例。

发布实际代码。并检查从调用到方法(如
FindClass
)的每个返回-不要盲目地继续而不检查错误,因为JNI是非常不宽容的。嗨,Andrew,thx for Responses。我试图将我的代码简化为这里的post代码,只返回空对象。但关键是它在api19中有效,但在api21之后失败。知道我该怎么查吗?在我的Nexus 5和棒棒糖5.1上效果很好。我怀疑您的IDE是否会导致问题,但为了以防万一,请尝试导入此项目并重建它。请注意,APK和SO文件已上载,以便您可以将它们的行为与本地构建的行为进行比较。