将jobjectArray从JNI传递到Android API 21/22上的Java崩溃,但是在API 19上工作

时间:2015-04-24 09:52:25

标签: android android-ndk java-native-interface

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

然而我发现了返回" jobjectArray"无法在API 21/22(Android 5.0)上完成,但适用于API 19.(Android 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;
}

java部分功能如下:

     String[] Simplejni();

错误消息如下:

JNI DETECTED ERROR IN APPLICATION: attempt to return an instance of java.lang.Object[] from com.test.Simplejni                

请告知任何有关如何调查此问题的建议,谢谢。

更新:20150427

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

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法: 你只需用API 21+上的java对象类替换java/lang/Object,例如, jclass localClass = env->FindClass("com/example/YourLocalClass");, 从日志中,我们可以知道对象类不是yourJavaLocalObject类的实例。