Android ICS : 试图使用陈旧的本地引用的JNI错误 0x1

 2023-01-19    357  

问题描述

将我的手机升级到Android 4.03 ICS我的游戏dosent已打开了,它就在设备上没有任何错误混乱了,并且在Eclipse上

04-02 16:55:27.672: E/dalvikvm(26884): JNI ERROR (app bug): attempt to use stale local reference 0x1
04-02 16:55:27.672: E/dalvikvm(26884): VM aborting

我的游戏主要是在Java上写的,但有些部分在C中,这就是我认为
问题是(因为说JNI错误,所以很难弄清楚:))

Android ICS : 试图使用陈旧的本地引用的JNI错误 0x1

当然我不知道问题在哪里,所以我不提供任何代码

我没有在Android 2.3

上遇到这个问题

我不知道它是否有帮助,但有时我会遇到此错误

04-02 16:55:26.061: E/Adreno200-ES11(26884): <qglDrvAPI_glTexImage2D:1913>: GL_STACK_UNDERFLOW

推荐答案

虽然Ernest的答案从技术上讲是正确的,在技术上是正确的,在本地陈旧的本地引用了0x1之类的东西, Java VM试图使用不是Java对象作为Java对象的东西.

例如,让我们假设您的JNI函数为:

JNI_EXPORT jboolean foobar(JNIEnv *env, jobject self) {
  ...
  return JNI_TRUE;
}

但是,您错误地将Java对应物声明为public native Boolean foobar()而不是public native boolean foobar().

这是一个简单的错误,因为boolean和Boolean之间的唯一区别是大写.

  • boolean,一种原始类型,在JNI中表示为boolean
  • java.lang.Boolean,也称为Boolean,是一种类型,在JNI中表示为jobject

从foobar返回后,Java VM将对待JNI_TRUE值(0x1),就好像它是指java.lang.Boolean对象一样,这将导致这种致命的错误.

其他推荐答案

“陈旧的本地参考”错误意味着您要保存对JNI调用之间某些Java对象的本地引用;您需要使用NewGlobalRef方法将该引用转换为全局参考,然后再执行任何可能导致参考持续存在的参考范围之外的参考.

尽管严格来说,这是始终必要的 – 它在JNI规格中 – 仅仅是因为冰淇淋三明治实际上会在Android平台上引起问题.

其他推荐答案

@ernest和@ilya是正确的.请注意,该问题也以其他方式表现出来,而不仅仅是签名不匹配.我遇到了另一种非常具体的情况,该案例被解释了此处在Android’团队的博客中:

错误:错误地假设FindClass()返回全局参考

FindClass()返回本地参考.许多人认为其他情况.在没有类卸载的系统中(例如Android),您可以对待Jfieldid和Jmethodid,就好像它们是全局一样. (它们实际上不是参考,但是在具有类卸载的系统中,存在类似的生命周期问题.)但是JCLASS是参考,FindClass()返回本地参考.常见的错误模式是”静态JCLASS”.除非您将本地引用转换为全局引用,否则您的代码被打破.

基本上,我正在缓存jclass FindClass在全局变量中返回的jclass,但是事实证明该值(从Android 4?)现在是LocalRef.结果,我不得不将其转换为像这样的全球RERF:

jclass jc = env->FindClass(callbacks.name);
// Since Android ICS, class references are not global so we need to peg a
// global reference to the jclass returned by FindClass(), otherwise we get
// following error in the log:
// "JNI ERROR (app bug): attempt to use stale local reference 0xHHHHHHHH".
callbacks._class= static_cast<jclass>(env->NewGlobalRef(jc));

经过大量的头部抓手,这解决了我的问题.

以上所述是小编给大家介绍的Android ICS : 试图使用陈旧的本地引用的JNI错误 0x1,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25759.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。