开发中碰到的问题:android java.lang.UnsatisfiedLinkError:
2016-05-20 11:28
288 查看
产生此类异常主要有两种原因:
一,
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了
一,
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了
相关文章推荐
- Android 中的线程池
- Android M 新的运行时权限开发者需要知道的一切
- hdu 5199 Comparison of Android version
- Android ToolBar
- Android ActionBar的基本用法
- android版本更新功能-完整版
- Android 控制listview 滑动速度
- shape设置部分为圆角的坑
- Android SQLite 的介绍和使用(二)
- 手把手教你写框架之ShykyAnnotations - 配置篇
- Android SQLite 的介绍和使用(一)
- [Android] SlidingDrawableTabLayout
- 手把手教你写框架之ShykyAnnotations - 注解
- 半透明的actionbar的实现
- Android RecycleView汇总
- Android ListView 去除边缘阴影、选中色、拖动背景色
- android studio部署手机导致unable to detect adb version的处理
- 笔记 第12周 - Android应用性能与优化
- [置顶] Android 长按识别图中二维码
- android切换到后台,返回后图片纹理丢失