错误信息:

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问题!!!相关推荐

  1. 替换Android中VM 加载动态库方式

    Android 加载动态库的代码在 dalvik/vm/Native.cpp ( froyo 中是 Native.c),加载的方式就是调用 libdl 中 dlopen, dlsym 这些函数 应该可 ...

  2. Android基础——动态加载so库

    Android中动态加载so 原因:如果把so文件直接放在libs目录下,在android程序启动的时候会默认加载libs目录下的所有so库,但这些so库可能会在某些地方存在冲突,使用动态加载so库, ...

  3. Android NDK动态加载SO库

    背景 对于一个普通的android应用来说,so库的占比通常都是巨高不下的,因为我们无可避免的在开发中遇到各种各样需要用到native的需求,所以so库的动态化可以减少极大的包体积,自从2020腾讯的 ...

  4. android 动态库获取路径问题,一种Android App在Native层动态加载so库的方案

    这篇文章通过实战案例,介绍了一种有条理的组织Native层代码层级结构的方法.并且,在良好的代码层级.作用分工的基础上,实现了动态的按需加载.卸载so库.文章的最后,还介绍了实践过程中遇到的困难以及对 ...

  5. android 加载三方so的方法_Android开发教程之动态加载so库文件的方法

    Android开发教程之动态加载so库文件的方法,我想对于静态加载 so 库文件,大家都已经很熟悉了,这里就不多说了.在 Android 开发中调用动态库文件(*.so)都是通过 jni 的方式,而静 ...

  6. Android NDK下STD库share static方式加载 (so库混乱调用问题)

    结论 -DANDROID_STL=c++_shared 有该选项 share方式加载STL,打包的so库不含有STD代码 没该选项 static方式加载STL. // 打so库的build.gradl ...

  7. Android常用图片加载库介绍及对比

    前言 图片加载在 Android开发项目中是必不可少的,为了降低开发周期和难度,我们经常会选用一些图片加载的开源库,而Android发展到现在图片加载开源库也越来越多了,下面介绍几种开发中主流的图片加 ...

  8. Android平滑图片加载和缓存库 Glide 使用详解

    版权声明:本文原创作者:一叶飘舟 作者博客地址:http://blog.csdn.net/jdsjlzx 一.简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide的图片加载库,作者 ...

  9. android ndk怎样加载o文件_JNI初探之NDK 开发环境配置

    安装 CMake.LLDB与NDK 开发工具包 CMake 简介 CMake 是一款比make更强大的编译自动配置工具,它可以根据不同平台.不同的编译器,并通过CMakeLists.txt文件中简单的 ...

最新文章

  1. 跨平台使用exp/imp进行数据库转移时出现丢失对象的原因
  2. 安装jdk后出现bash: ./java: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
  3. One order search by guid uuid
  4. python 示例_Python中带有示例的关键字除外
  5. html动态图标代码,SVG动态图标是如何实现的
  6. 机器学习(Machine Learning)
  7. HP常用函数总结(一):
  8. AndroidHttpClient详解
  9. 【新知实验室 TRTCIM】实时互动课堂最佳实践
  10. Android应用快捷方式
  11. centso系统命令来源查询
  12. 蓝湖访问显示“加载遇到问题”
  13. Java中dynamic是什么_java中dynamic web project与web project 的区别
  14. 蚂蚁金服上市估值2k亿美金!会开发到底有多吃香?
  15. C# web references 调用出错 The underlying connection was closed: An unexpected error occurred on a send.
  16. uni-app开发小程序app页面中获取globalData
  17. android 播放静态mp4,Android 使用VideoView播放MP4的简单实现
  18. 操作系统的作用是什么?目前主流的操作系统有哪些?主要特点是什么?
  19. Linux应用开发3 字符串处理,字符串与其他数字类型的转换,向应用程序传参
  20. HK-TrueDyne液体密度传感器应用:盐水浓度测量

热门文章

  1. 00-02.PHP 网站假设 之 学习PHP语法 [James建站]
  2. hibernate之缓存
  3. C# 垃圾回收器高效工作
  4. 存储分类分析:DAS、NAS、SAN[转]
  5. oracle学习--循环语句
  6. 耳前瘘管是否必须切除
  7. Non-static field ‘func1‘ cannot be referenced from from a static context
  8. hbase官方网站声称的兼容是否是100%兼容?
  9. Django接入paypal的账户-准备工作
  10. css3加载图片淡入效果