android通过Jni加载so库遇到UnsatisfiedLinkError问题!!!
错误信息:
java.lang.UnsatisfiedLinkError: hsl.p2pipcam.nativecaller.NativeCaller
at hsl.p2pipcam.manager.DeviceSDK.createDevice(DeviceSDK.java:74)
at hsl.p2pipcam.manager.Device.createDevice(Device.java:66)
at cn.yycloud.fragments.WebCameraFragment.onClick(WebCameraFragment.java:256)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
终于解决了困扰我半个世纪的难题,记录下:
我的项目中使用了别人的so类,已经打包好了,且只有armeabi这一种。按说应该是兼容性最好的了,但是问题偏偏出现了!!!
一旦加载so时就会报错Java.lang.UnsatisfiedLinkError ,各种千百度和google只有和我类似,从没有和我一样的情况。从出现这个问题 到现在解决 中间省略可以绕地球一圈的文字。。。
so库交叉编译时 可选arm,x86,mips三种架构,者三种结构还有32位于64位之分。
百度得知其中有个坑:
如果你的项目中有arm64-v8a,当你的app在64位arm架构的cpu手机上运行时,只会从arm64-v8a找so库,找不到就报错,不会再去armeabi-v7a和armeabi里去再找。
如果没有arm64-v8a文件夹的话,会从armeabi-v7a找,找不到就去armeabi找。都找不到才报错。
但是!!!经过N次报错后,,,
我发现手机只会根据cpu找对应文件夹下的so加载,没有就特么的直接报错,根本不会重新去别的文件夹下找!!!!(我怀疑可能eclipse和Android studio编译的原因,或者新版安卓系统加载so库的策略改变了)
最后我的解决办法是:新建armeabi,armeabi-v7a,arm64-v8a,arm-v8a,然后在四个文件夹内 分别拷贝一份so库放入。
转载于:https://www.cnblogs.com/changyiqiang/p/7445316.html
android通过Jni加载so库遇到UnsatisfiedLinkError问题!!!相关推荐
- 替换Android中VM 加载动态库方式
Android 加载动态库的代码在 dalvik/vm/Native.cpp ( froyo 中是 Native.c),加载的方式就是调用 libdl 中 dlopen, dlsym 这些函数 应该可 ...
- Android基础——动态加载so库
Android中动态加载so 原因:如果把so文件直接放在libs目录下,在android程序启动的时候会默认加载libs目录下的所有so库,但这些so库可能会在某些地方存在冲突,使用动态加载so库, ...
- Android NDK动态加载SO库
背景 对于一个普通的android应用来说,so库的占比通常都是巨高不下的,因为我们无可避免的在开发中遇到各种各样需要用到native的需求,所以so库的动态化可以减少极大的包体积,自从2020腾讯的 ...
- android 动态库获取路径问题,一种Android App在Native层动态加载so库的方案
这篇文章通过实战案例,介绍了一种有条理的组织Native层代码层级结构的方法.并且,在良好的代码层级.作用分工的基础上,实现了动态的按需加载.卸载so库.文章的最后,还介绍了实践过程中遇到的困难以及对 ...
- android 加载三方so的方法_Android开发教程之动态加载so库文件的方法
Android开发教程之动态加载so库文件的方法,我想对于静态加载 so 库文件,大家都已经很熟悉了,这里就不多说了.在 Android 开发中调用动态库文件(*.so)都是通过 jni 的方式,而静 ...
- Android NDK下STD库share static方式加载 (so库混乱调用问题)
结论 -DANDROID_STL=c++_shared 有该选项 share方式加载STL,打包的so库不含有STD代码 没该选项 static方式加载STL. // 打so库的build.gradl ...
- Android常用图片加载库介绍及对比
前言 图片加载在 Android开发项目中是必不可少的,为了降低开发周期和难度,我们经常会选用一些图片加载的开源库,而Android发展到现在图片加载开源库也越来越多了,下面介绍几种开发中主流的图片加 ...
- Android平滑图片加载和缓存库 Glide 使用详解
版权声明:本文原创作者:一叶飘舟 作者博客地址:http://blog.csdn.net/jdsjlzx 一.简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide的图片加载库,作者 ...
- android ndk怎样加载o文件_JNI初探之NDK 开发环境配置
安装 CMake.LLDB与NDK 开发工具包 CMake 简介 CMake 是一款比make更强大的编译自动配置工具,它可以根据不同平台.不同的编译器,并通过CMakeLists.txt文件中简单的 ...
最新文章
- 跨平台使用exp/imp进行数据库转移时出现丢失对象的原因
- 安装jdk后出现bash: ./java: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
- One order search by guid uuid
- python 示例_Python中带有示例的关键字除外
- html动态图标代码,SVG动态图标是如何实现的
- 机器学习(Machine Learning)
- HP常用函数总结(一):
- AndroidHttpClient详解
- 【新知实验室 TRTCIM】实时互动课堂最佳实践
- Android应用快捷方式
- centso系统命令来源查询
- 蓝湖访问显示“加载遇到问题”
- Java中dynamic是什么_java中dynamic web project与web project 的区别
- 蚂蚁金服上市估值2k亿美金!会开发到底有多吃香?
- C# web references 调用出错 The underlying connection was closed: An unexpected error occurred on a send.
- uni-app开发小程序app页面中获取globalData
- android 播放静态mp4,Android 使用VideoView播放MP4的简单实现
- 操作系统的作用是什么?目前主流的操作系统有哪些?主要特点是什么?
- Linux应用开发3 字符串处理,字符串与其他数字类型的转换,向应用程序传参
- HK-TrueDyne液体密度传感器应用:盐水浓度测量
热门文章
- 00-02.PHP 网站假设 之 学习PHP语法 [James建站]
- hibernate之缓存
- C# 垃圾回收器高效工作
- 存储分类分析:DAS、NAS、SAN[转]
- oracle学习--循环语句
- 耳前瘘管是否必须切除
- Non-static field ‘func1‘ cannot be referenced from from a static context
- hbase官方网站声称的兼容是否是100%兼容?
- Django接入paypal的账户-准备工作
- css3加载图片淡入效果