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

Pass jobjectArray from JNI to Java crash on Android API 21/22 but work on API 19

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

但是我发现 return "jobjectArray" 无法在 API 21/22 (Android 5.0) 上完成,但可以在 API 19 上完成。(Android 4.4) (无法完成 意味着它在 JNI 部分 return 但它挂起并且在 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

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

的实例