JNI DETECTED ERROR IN APPLICATION 解决记录

JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte JNI与外部编码格式不一致导致程序崩溃 阅读详情

最近遇到一个JNI的问题,同一套代码在Android4.4版本前的设备上运行是OK的,但是在Android5.0之后的设备上就会崩溃,查看logcat发现报JNI DETECTED ERROR IN APPLICATION错误。

      (1)第一个错误:

               JNI DETECTED ERROR IN APPLICATION: calling static method xxxx with CallxxxxMethodV in call to CallxxxxMethodV

       有过JNI编程经验的就会知道,调用方法分static和非static两种,分别会用到

                    GetStaticMethodID                                    GetMethodID    

                    CallStatic<type>Method                            Call<type>Method

                    其中<type>指Int, Long, Char等类型

       问题的原因就是编写JNI代码的同事混用了这两种方式,先用了GetStaticMethodID,然后又用的非static的CallIntMethod方法,Android4.4之前版本JNI检查机制没有Android5.0之后的版本严格,所以没有报错,程序也不会崩溃,但正确的方式应该是GetMethodID+Call<type>Method,GetStaticMethodID+CallStatic<type>Method,这个问题解决后又接着又报出了下面的错误。

      (2)第二个错误:

               JNI DETECTED ERROR IN APPLICATION: native code passing in reference to invalid stack indirect reference table or invalid reference: 0xfff5f1b0
               in call to CallVoidMethod
 <==这一行报错是问题的切入点

       这个错误显示是CallVoidMethod的参数非法引用,网上找了一些相关问题的帖子,结合本地代码,发现最有可能的就是线程间不能直接传递JNIEnv和jobject这类线程专属属性值导致,要知道JavaVM是属于java进程的,每个进程只有一个JavaVM,而这个JavaVM可以被多线程共享,但是JNIEnv和jobject是属于线程私有的,不能共享,那有什么办法解决呢?这里我们不讲JNIEnv的线程间传递,有兴趣的网上可以找到相关帖子,而jobject可以用全局引用的方式在多线程间使用,举个简单的例子:

[cpp]  view plain  copy
  1. #Include <jni.h>  
  2. #include <pthread.h>  
  3. pthread_t pthread;  
  4. jobject object;  
  5. JavaVM* jvm;  
  6. void *run(void *arg)  
  7. {  
  8.     JNIEnv * jenv;  
  9.     jvm->AttachCurrentThread(&jenv, NULL);  
  10.     jenv->CallVoidMethod(object, jnv->GetMethodID(jnv->GetObjectClass(object), "foo", "()V"));  
  11.     jenv->DeleteGlobalRef(object);  
  12.     jvm->DetachCurrentThread();  
  13.     return NULL;  
  14. }    
  15.   
  16. void Java_com_program_Initialize(JNIEnv*jenv, jobject caller)  
  17. {   /*要想在新线程中使用对象caller,就必须以全局引用方式保存,否则caller只是局部引用,本方法返回后就会销毁*/  
  18.     object = jnv->NewGlobalRef(caller);   
  19.     jenv->GetJavaVM(&jvm);  
  20.     pthread_create(&thread, NULL, run, NULL);  
  21. }  
            再回到前面的问题,按照这个线索,我在本地JNI代码里发现在pthread_create创建新线程之前,仅仅将jobject保存在了一个全局变量里面,而没有使用全局引用,以上面的代码为例,即本地JNI代码里进行了类似object = caller;的赋值,这显然是没有用的,一旦函数返回,caller就会被GC回收销毁,object指向的就是一个非法地址,最终导致上面的JNI错误。
Android接入高德地图SDK时报错JNI DETECTED ERROR IN APPLICATION: fid == null Android接入amap高德地图SDK时报错: JNI DETECTED ERROR IN APPLICATION: fid == null in call to GetBooleanField from java.lang.Object com.autonavi.base.amap.mapcore.AMapNativeGlOverlayLayer.nativeGetNativeOverlayProperties(java.lang.String, java.lang.String, j... 阅读详情

相关推荐

Android之JNI DETECTED ERROR IN APPLICATION: illegal class name ‘XXX‘的错误解决方法

1、问题 JNI DETECTED ERROR IN APPLICATION: illegal class name 'com.example.chenyu.test.JniClient' 2、原因 我在jni里面,写成这样了 (*env)->FindClass(env, "com.example.chenyu.test.JniClient"); 特么我把

码莎拉蒂 5939

JNI DETECTED ERROR IN APPLICATION: JNI ERROR (app bug): jclass is an invalid local reference: 0xa9 (...

JNI (Java Native Interface) 检测到应用程序中的错误: JNI 错误 (应用程序 bug): jclass 是一个无效的本地引用: 0xa9 (在大小为 0 的表中索引 10 处删除的引用) 这个错误信息表明在 JNI 中发生了一个错误。这个错误可能是由于应用程序本身的 bug 导致的,也可能是由于 JNI 代码的 bug 导致的。 要解决这个问题,需要更深入地了解问题所...

weixin_35755823的博客 1094

Qt Android Jni资源释放JNI ERROR (app bug): local reference table overflow (max=512)

文章目录前言什么是JNI编程Native Code 本身的内存泄漏Global Reference 引入的内存泄漏什么类型需要释放?如何去释放?一、释放jstring二、释放 类 、对象、方法三、 释放 数组家族多次NewByteArray后,报错“ReferenceTable overflow” 解决方案 前言 最近使用Qt for android 开发时,因为采用了Jni开发,感觉有些东西没有做好,尤其是资源变量没有释放时会报错,我这边就遇到此错 JNI ERROR (app bug): local r

波风水门 832

JNI DETECTED ERROR IN APPLICATION解决记录

最近遇到一个JNI的问题,同一套代码在Android4.4版本前的设备上运行是OK的,但是在Android5.0之后的设备上就会崩溃,查看logcat发现报JNI DETECTED ERROR IN APPLICATION错误。       (1)第一个错误:                JNI DETECTED ERROR IN APPLICATION: calling static me

epeaktop的专栏 1万+

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 721

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

JNI DETECTED ERROR IN APPLICATION: java_object == null

记录一个问题,在调用一个j ni方法的时候报了一个错误,错误日志如下:01-02 10:29:26.288 20617-20617/? A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: java_object == null 01-02 10:29:26.288 20617-20617/? A/art:

itheimach的专栏 1万+

电感损耗 DCR/ACR/磁芯损耗 3 大来源解析:从集肤效应到磁滞回线

本文深入解析电感损耗的三大来源:DCR(直流电阻)、ACR(交流电阻)和磁芯损耗,从集肤效应到磁滞回线的微观机制。通过对比不同材料和设计策略,提供高频开关电源中电感损耗的优化方案,帮助工程师提升系统效率和可靠性。

weixin_34379433的博客 513

android jni黑屏,android使用高德地图出现诡异的:JNI DETECTED ERROR IN APPLICATION

今天用 android studio 写程序踩到这个诡异的坑: 首先介绍使用的开发工具和环境:android studio 测试机型:红米note2: android 5.0.2是这样的:笔者程序中写的这个页面中上方是一个地图(高德地图),下方是一个listview,展示地图中的相关数据,然后今天要改造这个listview为expandableListViewV,吭哧吭哧写完了,高高兴兴等华丽...

weixin_42116921的博客 1240

炼丹-Pyecharts: JupyterLab无法render_notebook

炼丹-Pyecharts: JupyterLab无法render_notebook问题描述Jupyter-Lab 环境下render_notebook显示空白 问题描述Jupyter-Lab 环境下render_notebook显示空白 首先需要使用pyecharts自带的config来申明一下使用pyecharts的运行环境 from pyecharts.globals import Curre...

MichaelZzzzz的博客 4687

【HSCNN解析】HSCNN:从欠采样光谱图重建高光谱图的CNN网络

本文介绍HSCNN,是一个将欠采样光谱图重建为高光谱图的纯CNN网络,2017年提出。

上个大学哪有不疯的?硬撑罢了! 1620

JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception '

JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception 'java.lang.IllegalStateException' thrown in void android.os.MessageQueue.nativePollOnce(long, int):-2

xueyunvhai的专栏 8126

ODS 与模态分析

模态分析不是通过现有的 FRF 来“推测”或“估计”其他模态参数,而是通过测量和分析 FRF 来。

轩辕霸天L 1260

JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0xe7428c54

20756/com.tencent.mobileqq A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0xe7428c54 art/runtime/java_vm_ext.cc:470] from java.lang.Object cn....

情随事迁个人博客 1313

河洛理数【陈抟】每月月卦推演每日运卦

Step2:每卦中的日爻遇到二十四节气中的当日为节(月初)或气(月中)的时候,所代表的日期需要变更。正常来说,屯卦分别代表初一到初六,但是由于当月初二时立秋节,所以初爻就不能作为初一、而是要作为立秋节开始时(文中还精算到了立秋是从初二的午时开始),如下。说的代表月运的基础卦上进行当月日卦的推演方式。老样子,我们还是按照书中举得例子卦在这边进行一步步的推演,最后做总结。Step1:从月卦爻下一爻开始,自下而上,进行五个爻的爻变,新推演的每个卦代表六天,如下。假设当月月卦是即济卦,月爻在二爻,如图所示(

Daniel专栏 764

环境配置与基础教程:当前大厂主流套路:使用 MLflow 全链路管理 YOLO 实验参数、指标与模型版本

YOLO26与MLflow结合实现高效实验管理 YOLO26通过移除DFL模块和实现无NMS端到端推理,在CPU推理速度上提升43%,同时简化了模型导出流程。MLflow 3.10/3.11版本新增多工作区支持、成本追踪和安全序列化等功能,为机器学习实验提供全生命周期管理。两者结合可解决传统"截图+Excel"式实验管理的痛点,实现参数追踪、指标对比和模型版本控制的自动化。 关键优势: YOLO26架构优化带来显著性能提升 MLflow提供实验到生产的全链路管理 原生集成简化了计算机视觉

ZXSXJ的博客 191

java vm ext.cc_JNI DETECTED ERROR IN APPLICATION: java_object == null

记录一个问题,在调用一个j ni方法的时候报了一个错误,错误日志如下:01-02 10:29:26.288 20617-20617/? A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: java_object == null01-02 10:29:26.288 20617-20617/? A/art:...

weixin_31367439的博客 1596

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JNI DETECTED ERROR IN APPLICATION: can't call void android.view.View.setElevation(float) on null obj

bug记录: JNI DETECTED ERROR IN APPLICATION: can't call void android.view.View.setElevation(float) on null obj   出现原因: SwipeRefreshLayout 嵌套 CoordinatorLayout 嵌套 AppBarLayout ...;   解决方法: 在 AppBar...

wuqingsen1的博客 924

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0xea

06-22 14:45:08.694 13868-13868/com.skj.perfect A/art: art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0xea    art/runtime/c...

u013174667的博客 4226

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java vm art 2.1.0_A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: mid == n...

/com.tencent.mobileqq A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: mid == nullin call to CallObjectMethodVart/runtime/java_vm_ext.cc:470]from java.lang.Object cn.qssq666.E...

weixin_39966740的博客 981

A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: mid == null

/com.tencent.mobileqq A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: mid == null in call to CallObjectMethodV art/runtime/java_vm_ext.cc:470] from java.lang.Object...

情随事迁个人博客 1050

记录一个jni动态注册不经意犯的错

错误提示:JNI DETECTED ERROR IN APPLICATION: jstring has wrong type 如果你的方法是这样写的 public native void init(String path) ; jni里面就要写成如下 void init(JNIEnv *env,jobject instance, jstring path_) {} 重点是jobj...

Kawa103的博客 602

JNI GetMethodID called with pending exception java.lang.NoSuchMethodError

JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.NoSuchMethodError: no non-static method "Lxxx;.size()I"

SXH_Android的博客 1万+

android jni 崩溃,Android JNI异常处理

我需要在JNI代码中实现异常处理.我不擅长jni而且找不到任何好的例子.所以,请提供完整的示例.这就是我在做的事情:jint JNI_OnLoad(JavaVM* vm, void* reserved) {jint result = -1;g_JavaVM = vm;if (vm->GetEnv((void **) &envLocal, JNI_VERSION_1_6) != JNI...

weixin_39710251的博客 959
上一篇: Android Studio 自定义打包apk名字
下一篇: 友盟推送
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值