JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法

混淆编译造成 java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in “/data/app-lib/xx/xx.so” android app运行的时候偶尔会遇到加载so文件的问题,譬如java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app-lib/xxx/xxx.so" 今天遇到这种问题时,我按照网上的资料进行如下检查: 检查对应编译目录lib下有没有对应so文件; 检查对应module下的 build.gradle 没有如下条件 sourceSets { main { jniLibs. 阅读详情

昨天拿到JNI的Android工程Demo,然后把demo整合到开发的主线工程上,发现调用JNI方法一直抛同一个异常

java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()

我以为是JNI的so库有问题,但是demo运行时正常的,我无法找到原因的所在。我可以确认的我自己的问题,今天上午问到另外一个写C的同事,向他描述了我的情况。然后他问我是不是包名不一致的原因,我恍然大悟。确实在我移植到主线上的工程时,将定于调用JNI的包名改掉了。而so库在编译的时候,是有指定调用的包名的,这个就可以解释为何demo运行正常。只需要保证android工程调用JNI的包名与so库定义的包名类名方法名一致就可以了。

下面简单介绍一下JNI的 .h文件的内容

#ifndef _Included_packagename_classname   //packagename 指的是android工程中的包名 classname指的是android工程中定义JNI的类,该类包含调用JNI的方法
#define _Included_packagename_classname
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     packagename_classname
 * Method:    methodName
 */
JNIEXPORT jint JNICALL Java_packagename_classname_methodname();  // jint 指的返回数据类型为int,JNICALL 后面指定了调用JNI方法的包名和类名、方法名...
JNI的 .c文件格式如下

#include "packagename_classname.h"  // 这个是指的定义.h文件的命名,必须与.h文件的命名一致
#include <stdio.h>

#include "../../../src/classname.h"  // 包含src目录下定义的.h文件

#include <android/log.h>
static char *tag = "logtag_jni"; // 定义打印log的标签

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO   , tag, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN   , tag, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , tag, __VA_ARGS__)
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, tag, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG  , tag, __VA_ARGS__)

/*
 * Class:     packagename_classname
 * Method:    methodName
 */
JNIEXPORT jint JNICALL Java_packagename_classname_methodName(){...}

......
}

了解这些,帮助理解JNI就容易多了

Android之java.lang.UnsatisfiedLinkError(Failed to register native method ***callMethod1())解决办法 1、问题 Failed to register native method com.example.chenyu.test.JniClient.callMethod1() java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.example.chenyu.test-2 阅读详情

相关推荐

西门子S7-200 SMART控制步进电机(二)

目录 一、开环运动控制方法 二、运动轴概述 三、配置运动控制向导 一、开环运动控制方法 S7-200 SMART CPU提供三种开环运动控制的方法: 1、脉冲宽度调制(PWM):内置于CPU中,用于速度、位置或占空比的控制 2、脉冲串输出(PTO):内置于CPU中,用于指定长度脉冲或指定距离的控制 3、运动轴:内置于CPU总,用于速度和位置的控制。本文所讲的就是通过运动轴实现步进电机的运动控制。 SR20和ST20 CP...

qq_43134642的博客 2万+

java+整合handwrite_解决java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad

我们在加载JNI的.so库的时候,Android Studio报类的错误“java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad”,该如何解决呢?具体错误内容如下:java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/co...

weixin_42294133的博客 1848

ESP32+ST7789 LCD屏实战:5分钟搞定中文显示与图片渲染(附完整代码)

本文提供了一份详细的ESP32驱动ST7789 LCD屏幕的实战指南。通过清晰的SPI硬件连接说明、ESP-IDF框架下的初始化代码,以及图片渲染与中文字库构建的核心算法,帮助开发者快速实现中文显示与图片渲染功能,并附有完整的代码示例和性能优化技巧。

weixin_29189377的博客 437

java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad错误的解决

困扰了我一天的一个问题,显示一个so文件报找不到,后来是图上的错误。让我误以为第一个so文件是读到了的。 先简单讲下个人对android项目引入so文件的原理性的理解,知道了这个原理其实就不难查出问题。 1.首先so文件是一个native方法的实现。我们都知道Android的架构,我们编写的应用程序都是在应用层展示的,那么怎么调用更底层的东西呢,比如说应用框架层。那就要依靠native方法...

ruizhenggang的博客 2万+

基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计与实现(附源码、仿真与计算书)

本文详细介绍了基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计方案。该设计利用STM32的高分辨率定时器(HRTIM)实现精确PWM控制,支持Buck、Boost和Buck-Boost三种工作模式自动切换,具备双向能量流动能力。通过PSIM仿真和Mathcad计算书进行参数优化,实测效率达95.8%,适用于新能源系统和电池管理等场景。

www00的博客 525

RK3568部署YOLOv8的7种方法对比:量化vs非量化的性能实测与优化建议

本文针对RK3568平台,深度对比了YOLOv8模型的七种部署方法,重点分析了量化与非量化策略的性能差异。通过实测数据,详细评估了不同方法在推理速度、CPU占用、内存消耗及模型精度上的表现,并提供了从模型结构调整到系统级优化的具体建议,为边缘AI部署选型提供实用参考。

weixin_29099217的博客 527

【android】 java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad错误的解决

使用JNI调用so的时候出现错误 这是由于没法调用到so。 1.确认在moudle中的gradle写入了 sourceSets { main { jniLibs.srcDirs = ['libs'] } } 2.调用So的类的包名必需要和so规定的包名一致,不然没法调用成功。java ...

了解—学习—进步—满足 3848

OS实验xv6 6.S081 开坑

OS实验xv6 6.S081 开坑 终于把xv6 2019 6.S081做完了,网络部分没有写,因为有计网实验了。怎么说呢,xv6的坑有点多,能做完多亏了:和我同学ljj交流,参考RedemptionC老哥的博客(他写的非常详细,遗憾的是,他好像没有写mmap),再者就是参考这位老哥的做法(没有源码,写得不是特别详细,不过有借鉴作用,mmap就是借鉴了他的思想)……废话不多说了,直接开始。 实验指导 首推RedemptionC的博客 这位老哥的个人博客 xv6 6.S081官网(后面的实验都要参考官网

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 4493

so文件无法加载

java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/**/lib/arm/***.so" 造成问题的可能原因: 1、对应.so文件对应的类,可能被混淆了,造成C/C++中的代码找不到对应的Java类; 2、没有对应的ndk; ...

zhanglei892721的博客 1144

Windows系统中 Xmanager 6 企业版下载安装激活教程

Xmanager 6 企业版安装激活教程 1.Xmanager 6 下载网址:https://yunpan.360.cn/surl_yrJrWq3GmjN 2. 双击 Xmanager-6.0.0169r 安装 3. 点击运行按钮 4. 点击下一步 5. 选择我接受许可证协议中的条款(A), 点击下一步。 6. 输入用户名:byg,公司名称:microsoft,序...

mry6的博客 9873

华为OD机试 - 整型数组按照个位数排序(Java 双机位C卷 100分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 349

【Java报错已解决】java.lang.UnsatisfiedLinkError

在Java开发的世界里,我们时常会遇到各种各样的报错,其中java.lang.UnsatisfiedLinkError就像一个隐藏在暗处的幽灵,常常让开发者和环境配置者们感到困惑和无奈。这个错误一旦出现,可能会使我们精心编写的Java程序戛然而止,严重影响项目的开发进度和稳定性。那么,这个神秘的UnsatisfiedLinkError究竟是如何产生的?又该如何有效地解决它呢?让我们一起深入探究这个恼人的报错问题。

鸽芷咕的博客 7702

国科大学习资料--人工智能原理与算法-2021年期末考试题解析(学长整理)

国科大学习资料–人工智能原理与算法-2021年期末考试题解析(学长整理) 国科大学习资料–人工智能原理与算法-2021年期末考试题解析(学长整理) 国科大学习资料–人工智能原理与算法-2021年期末考试题解析(学长整理) 根据学弟的反馈,该年的期末题只有5道,且均是作业题(所以大家一定要积极完成作业,考前多做几遍!!!!) 下面解析: 3.25 由于该题,我没有做过,所以只能给你英文版的答案。答案如下,其他的题目答案都是中文版。 5.9 8.10 12.20 15.13 ...

无名何许人的博客 3978

android引入.so报错

注意厂家提供的.so和一些java文件包名不能更改,更改的话会报这个错误

亚洲程序员盟主得博客 4699

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android源码编译JNI遇到的问题与解决方法

这些问题是都是坑,有的问题晚上都找不到解决方法,是因为这些问题只要用到源码编译的时候才会遇到,这里我用的是源码编译。 问题如下;问题1.dlopen(“/data/app/xxx.xxx.so”)failed,dlopen”/data/app/xxx.xxx.so” has unexcepted e_machine 40 解决方法:这里是因为模拟器的cpu和编译出来的.so文件的平台不一样,这里

JianYeung的博客 2969

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JNI报错:java.lang.UnsatisfiedLinkError

当使用 JNI 从 Java 程序访问本机代码时,您会遇到许多问题。您会遇到的三个最常见的错误是:   1.无法找到动态链接。它所产生的错误消息是:java.lang.UnsatisfiedLinkError。这通常指无法找到共享库,或者无法找到共享库内特定的本机方法。     2.无法找到共享库文件。当用 System.loadLibrary(String libname) 方法(参...

Curiosity 1434

VC中sqlite的使用

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

java.lang.UnsatisfiedLinkError异常的正确处理方法,亲测有效,嘿嘿嘿

`java.lang.UnsatisfiedLinkError` 异常通常在 Java 应用程序尝试调用本地方法(即使用 Java Native Interface, JNI)时发生,但无法找到相应的本地库(`.dll` 在 Windows 上,`.so` 在 Unix-like 系统上,或 `.dylib` 在 macOS 上)或无法解析库中的特定函数时抛出。 ### 问题分析 `UnsatisfiedLinkError` 异常通常表明 Java 虚拟机(JVM)无法找到或加载所需的本地库。这可能是由

PythonAigc的博客 3487

Java调用本地接口:java.lang.UnsatisfiedLinkError:包名.类.方法(参数)

    最近在工作中需要调用第三方的接口,使用JNI去调用。但是在调用过程中,就出现了上面的异常,于是乎各种查找资料,终于 功夫不负有心人,终于找到了解决的办法。    其实Jni就是我们将Java的class文件编译成c的.h文件,之后根据头文件来编写源文件。所以这个过程中就会有相对应和一致的要求,我想你可能已经猜到了,就是类的包路径要和生成头文件类包路径一致。否则不是找不到方法,就是实例化不了...

qq_37687656的博客 1万+

Java.lang.UnsatisfiedLinkError解决办法

在用JNI编程时,经常会遇到Java.lang.UnsatisfiedLinkError这种报错。先排除xx.so文件在程序中的连接问题,确定工程可以找到xx.so文件。一般报此错误,大多是由于函数接口不对,使用如下命令sudo readelf -Ws libxx.so >> test.log把xx.so文件中的内容dump到test.log文件中,在test.log文件中可以看到所有函数的内容,

少年~学习啦 6450

关于jni调用报UnsatisfiedLinkError的可能

一、说明 最近在做一个项目,需要使用java去调本地动态连接库,之前做测试的时候直接用pojo进行测试,是能够正常调用的。后面项目需要将接口封装为REST api,所以在spring boot上面开发,但是同一个调用,在spring上面就出现问题了。 二、解决 先确保将dll文件放置到指定的地方,可以参考:https://bbs.csdn.net/wap/topics/38005381...

weixin_30279315的博客 766

【Java】已解决Java中的java.lang.UnsatisfiedLinkError异常

java.lang.UnsatisfiedLinkError是Java在尝试加载本地库(如.dll、.so、.dylib等)时遇到问题时抛出的一个错误。当Java虚拟机(JVM)找不到指定的本地方法实现,或者加载的本地库不兼容时,就会抛出这个异常。要解决这个问题,我们需要确保本地库文件存在、路径正确,并且与Java应用程序的位版本相匹配。已解决Java中的java.lang.UnsatisfiedLinkError异常。

屿小夏.的知识博客 2170
上一篇: Android 使用新浪微博SSO授权
下一篇: Conversion to Dalvik format failed with error 1 解决办法
hap_gx
博客等级 码龄14年 6粉丝 23原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值