关于java.lang.UnsatisfiedLinkError的小案例

在许多项目中我们都会用到第三方动态库.so文件,但是往往会引来很多烦恼,比如:java.lang.UnsatisfiedLinkError

06-17 15:52:08.097    7876-7916/com.ishow.scan E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-61542
    java.lang.UnsatisfiedLinkError: Native method not found: com.ishow.scan.zbar.ZbarManager.decode:([BIIZIIII)Ljava/lang/String;
            at com.ishow.scan.zbar.ZbarManager.decode(Native Method)
            at com.ishow.scan.decode.DecodeHandler.decode(DecodeHandler.java:58)
            at com.ishow.scan.decode.DecodeHandler.handleMessage(DecodeHandler.java:39)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:194)
            at com.ishow.scan.decode.DecodeThread.run(DecodeThread.java:45)

无论你怎么搞,它就是报这个错误,让人很烦恼,本人开始使用Android studio,开始不懂如何导入动态库文件,毕竟Android studio不同于eclipse,在libs目录下放.so文件是没有用的,于是在Q群那里求救,终于有所收获,整理了一下,顺便在这里跟读者分享。

第一种方法:(最简单的方法)

在main目录下创建一个文件夹,文件夹名称:jniLibs,然后把我们的动态库文件导入到该文件夹下面,如图:

这样就可以把.so动态库文件导入到了Android studio。可是不管我怎么运行,就是报上面的java.lang.UnsatisfiedLinkError异常,我开始怀疑我导入的动态库文件,Android studio是不是无法找到,但按理说如果我的推断错误的话,应该不是报这个错误。于是我继续查找导入动态库文件到Android studio的方法,黄天不负有心人,我又学到了一种方法,

该方法主要有以下几个步骤:

1.在Windows下创建一个文件夹,文件夹名称lib

2.将动态库文件拷贝到lib目录下,如图,armeabi目录下存放.so文件

3.使用zip打包lib文件夹,然后重命名:armeabi.jar

4.把armeabi.jar拷贝到Android studio项目的libs目录下,即可

通过了第二种方法完成了导入动态库文件到Android studio了,可是运行时还是出现了java.lang.UnsatisfiedLinkError异常,无奈之下,我以为是Android studio搞的鬼,可能我不熟悉Android studio。可是当我切换到eclipse,新建一个项目,继续完成我的工作(扫描二维码的项目),一切工作准备好后,运行项目,还是出现java.lang.UnsatisfiedLinkError异常,我快要疯了。于是我静下来思考:不可能eclipse和Android studio都会出现java.lang.UnsatisfiedLinkError,除非一开始我就一直走进一个错误的“圈套”。不错,问题终于搞清楚了,问题一定是加载库文件的那个类。于是经过进一步探索,运来是存放库文件的包名我写错了,这个包名不能随便命名,必须严格按照库文件里面的Android.mk指定的包名。于是我把包名该为:com.zbar.lib(原先com.ishow.org.zbar时一直报错),把包名改回来后,运行,哈哈,问题终于解决了!

要解决关于jni的问题非常的苦恼,所以大家要注意了,要引用动态库文件,加载动态库文件的类对应的包名,必须与Android.mk里面定义的包名一致,否则将会出现java.lang.UnsatisfiedLinkError,如果这篇文章对你有帮助,希望留下个脚印,谢谢

时间: 2024-08-24 02:45:31

关于java.lang.UnsatisfiedLinkError的小案例的相关文章

Android studio java.lang.UnsatisfiedLinkError

最近开始转android Studio 本来以为新的开发工具会大大的提高效率 .结果我错了.今天踩了一天的坑. 我的项目中用到了so的文件.通常情况下在 eclipse中我们在libs/armeabi 这个目录下放so文件.一般情况下 都可以加载的到. 但是,刚换到AS 我也是这样做的.把so 文件放到 libs/armeabi 这个目录下.同时也在 app的gradle 文件中配置了如下的信息: sourceSets { main { jniLibs.srcDirs = ['libs'] }

java.lang.UnsatisfiedLinkError: D:\apache-tomcat-7.0.57\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform 错误

为了开发JavaWEB,安装了MyEclipse,在运行tomcat的时候发现报错:java.lang.UnsatisfiedLinkError: D:\apache-tomcat-7.0.57\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform.自己上网查了下,发现这个错误对于项目的运行时没有什么大碍的,可能自己有强迫症,总是想没错,就上网找了解决方法.我先麻烦,就选择了最简单的方法,去tomcat目录下

J2EE引擎出现java.lang.UnsatisfiedLinkError: CC错误的原因

运行JSP报表程序页面出现java.lang.UnsatisfiedLinkError: CC错误有以下几种原因和处理方法: 1.请查看控制台的错误信息 a:如果控制台的消息是类似 java.lang.UnsatisfiedLinkError: no MRChkLib in java.library.path,Error loading library MRChkLib 这样的错误信息,那么是因为MRChkLib.dll没有拷贝到windows的System32目录下. (MRChkLib.dl

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapVOS_v2_1_3: findLibrary returned nu

在使用百度地图进行开发的时候,如果遇到了 Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapVOS_v2_1_3: findLibrary returned null 这时候你可以尝试把armeabi-v7a这个包删除....如果实在不行可以尝试一下把X86这个报业删除试一下. Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapVOS_v

Error: java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path

Error Message When compiling or executing a Java application that uses the ArcObjects Java API, the following error is returned: java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path Cause The PATH variable does not include a directory which

Error loading RS jni library: java.lang.UnsatisfiedLinkError 解决方案

我们可能会用到模糊效果,就会想到renderscript.jar , 但是模糊效果是3.0以后的效果,在有的4.x以上的手机上也会造成错误,Error loading RS jni library: java.lang.UnsatisfiedLinkError,会报出这样的错误,明显是手机上没有.so包. 错误图示 明显可以得出,没有.librsjni.so的包存在,那么要怎么处理呢,其实在sdk中已经提供了相应的.so库.我们只要找到即可,然后放入libs下即可 这样在任何机型上都不会报错了,

Android中运行的错误:java.lang.UnsatisfiedLinkError: Couldn't load locSDK3: findLibrary returned null.

今天在使用百度地图的时候运行发现报错: 明明已经加入了liblocSDK3.so,但总是无法定位.提示错误java.lang.UnsatisfiedLinkError: Couldn't load locSDK3: findLibrary returned null. 网上找了很多的资料找到一个方法: 在libs下新建一个armeabi-v7a,然后将liblocSDK3.so复制一份到该文件夹" 如果这个不行,那么新建一个armeabi文件夹再放入liblocSDK3.so就可以了. Andr

使用Snappy 压缩方式报错“java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path”

情况描述 其实这个问题已经困扰我很久了,最近在公司Linux上搭建hadoop 和 spark环境的时候,我就遇到 spark提交作业到yarn 集群就报错这个错,当时已经安装snappy环境了,任何关于snappy静态库都编译了,这是我提交到spark mail list上的http://apache-spark-user-list.1001560.n3.nabble.com/java-lang-UnsatisfiedLinkError-no-snappyjava-in-java-librar

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load 。。。。

最近需要做个有地图搜索功能的模块,用到百度地图SDK,但是从官网上下载SDK后导入工程,修改apiKey后,还是无法运行,总是抱这个错误:Caused by: java.lang.UnsatisfiedLinkError: Couldn't load locSDK_3.1: findLibrary returned null,找了好多资料都无解,其中有篇博客提到类似的问题Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduM