android studio加载 so文件以及出错。android java.lang.UnsatisfiedLinkError: 分析及解决方法

本文主要探讨了Android开发中遇到的`java.lang.UnsatisfiedLinkError`问题,包括JNI未编译和使用预编译SO库时的错误分析。针对这两种情况,提供了详细的解决方法,如检查SO文件位置、核对方法原型和包名一致性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.so库放到主module的libs/下的对应CPU架构目录中,比如libs/armeabi中。
主module的build.gradle文件里面,android标签里添加:
sourceSets {
    main {
jniLibs.srcDirs = ['libs']
    }
}

这里也有个:http://www.jb51.net/softjc/399605.html


然后是出错:

android java.lang.UnsatisfiedLinkError: 分析及解决方法"

一, jni还没有编译 是一边编译一边用的

 这要分两种情况:
  第一种是unsatisfiedlinkerror:dll名称。说明dll没有放到合适的位置。对于android开发,我们一般把so放在 libs目录下,但是还是会出现这个错误。根本原因system.loadlibrary函数会加载你指定的so,该so中需要链接的所有符号都需要能够链接到,如果有一个链接不成功,那么整个so也会加载失败。仔细检查so中需要的所有符号,确保其存在且在正确的位置上。

  第二种是unsatisfiedlinkerror:方法名称。说明dll已经成功加载,但是方法名字错了。这个错误最最常见而且基本的解决方法是:仔细对比你的native 方法的原型确保与javah生成的原型一致。在java端修改native方法名称一定要记得更新c/c++端的函数名称,这是造成此类错误最常见的原因。



二,是jni已经编译过 直接用别人编译好的so库
   你建的项目放loadlibrary()的类的包名要和原项目编译jni时loadlibrary()所在的类名应该一致  ,因为jni好像是根据java包名来命名的,所以改成一致的名字 就ok了



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值