将jobjectArray从JNI传递到Android API 21/22上的Java崩溃,但使用API 19
我使用下面的代码来处理Android和JNI中的JNI数组 然而,我发现返回“jobjectArray”无法在API 21/22(Android 5.0)上完成,但可以在API 19上运行。(安卓4.4) (无法完成表示它在JNI部分返回,但在Java上挂起且没有响应) 下面是我试图在Android应用程序中实现的伪代码将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
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
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文件已上载,以便您可以将它们的行为与本地构建的行为进行比较。