Non-fatal Exception: java.lang.UnsatisfiedLinkError: dlopen failed: library “libmmkv.so“ not found

这篇具有很好参考价值的文章主要介绍了Non-fatal Exception: java.lang.UnsatisfiedLinkError: dlopen failed: library “libmmkv.so“ not found。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

项目中使用的 mmkv 版本1.0.23 太老了,并且1.0.23 还引入了 libc++_shared.so 约 249K 左右 + libmmkv.so 约 40 K。

翻查 github 发现最新版本已经到了 1.2.14,并且aar 包体也优化了,所以有了升级需求。


问题描述

在项目中把 mmkv 1.0.23 版本升级到了 1.2.14, 解决完一堆编译错误后(kotlin版本不一致,要求gradle升级等),以为万事大吉,没想到启动时报

Non-fatal Exception: java.lang.UnsatisfiedLinkError: dlopen failed: library "libmmkv.so" not found

网上搜索了各种帖子——无解,后来在 github issue 中 有人提过类似问题 dlopen failed: library "libmmkv.so" not found · Issue #958 · Tencent/MMKV · GitHub

受到了点启发,于是把 源码GitHub - Tencent/MMKV: An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX. clone  下来研究下。


原因分析:

源码clone 后编译 mmkv module 发现编译日志里只会生成 以下四种 cpu 架构的 so

armeabi-v7a, arm64-v8a, x86,  x86_64

没有生成 armeabi

Non-fatal Exception: java.lang.UnsatisfiedLinkError: dlopen failed: library “libmmkv.so“ not found

而我自己的项目只支持 armeabi......

因此原因很明显,和自己项目的 cpu 架构设置有关。

为什么 没有编译生成 armeabi 的 so 呢? 笔者再翻阅了下资料:

ndk17开始不支持armeabi,需要把ndk的版本改为16及以下并且需要把gradle插件降级为4.1.3及以下,但是项目里的 gradle 已经升级到了 7.x 了......


解决方案:

方案1: app 的build.gradle 检查  android-buildTypes 下的ndk abiFilters

ndk {
    abiFilters "armeabi"
}

改为

ndk {

          abiFilters "armeabi-v7a"

}

armeabi-v7a 可以向下兼容 armeabi

方案2: 如果项目有些so 只有 armeabi 架构无法升级到 v7a 的话,可以 通过 mmkv maven 依赖的aar 包找到 armeabi-v7a 的 so, 把 so 放到项目 armeabi 目录,abiFilters  可以依旧是  "armeabi"。文章来源地址https://www.toymoban.com/news/detail-404956.html

到了这里,关于Non-fatal Exception: java.lang.UnsatisfiedLinkError: dlopen failed: library “libmmkv.so“ not found的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • eclipse和hadoop连接攻略(详细) Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Wi

    吸取前人教训,写下此稿 笔者所用到的软件版本: hadoop 2.7.3 hadoop-eclipse-plugin-2.7.3.jar eclipse-java-2020-06-R-win32-x86_64 先从虚拟机下载hadoop 需要解压好和文件配置好的版本,方便后文配置伪分布式文件)  笔者linux的hadoop目录为:/usr/hadoop 下载到windows的某个目录,自行选择 笔者下

    2024年02月04日
    浏览(43)
  • eclipse和hadoop连接攻略(详细) Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Wi

    吸取前人教训,写下此稿 笔者所用到的软件版本: hadoop 2.7.3 hadoop-eclipse-plugin-2.7.3.jar eclipse-java-2020-06-R-win32-x86_64 先从虚拟机下载hadoop 需要解压好和文件配置好的版本,方便后文配置伪分布式文件)  笔者linux的hadoop目录为:/usr/hadoop 下载到windows的某个目录,自行选择 笔者下

    2024年02月02日
    浏览(122)
  • android报java.lang.UnsatisfiedLinkError错误大全

    1、java.lang.UnsatisfiedLinkError: method:logWrite, sig:(Lcom/tencent/mars/xlog/Xlog$XLoggerInfo;Ljava/lang/String;)V 完整错误日志如下:  检查是否项目开启了混淆,导致native方法及所在类被混淆,而找不到对应的方法。 2、java.lang.UnsatisfiedLinkError: No implementation found for void org.webrtc.PeerConnectionFactory.

    2024年02月13日
    浏览(37)
  • java.lang.UnsatisfiedLinkError: No implementation found for

    由于native方法修改了包名,导致load so执行的时候崩溃原因分析; 1)确认报错的方法有没有被混淆。         查看混淆 文件是否有下面的配置:                 //保留native方法的类名和方法名                 -keepclasseswithmembernames class * {            

    2023年04月23日
    浏览(43)
  • Elasticsearch启动报错:fatal exception while booting Elasticsearchjava.lang.RuntimeException: can not run

    出错原因: Elasticsearch不允许使用root用户启动 解决办法: 1、为elaticsearch创建用户并赋予相应权限(推荐) 2、允许root用户启动,需要修改elaticsearch配置

    2024年02月17日
    浏览(41)
  • 使用微软Azure的tts文本转语音服务出现java.lang.UnsatisfiedLinkError

    最近,在使用微软tts文本转语音的speech服务时,项目正常整合了微软的依赖,服务也正常启动。但是只要调用微软文本转语音服务api时,就会出现如下报错。 该方法是一个native方法,我以为是依赖中的dll文件没有加载到,结果检查不是。 最后分析:native依赖的是底层实现的

    2024年02月14日
    浏览(60)
  • android studio调用so出现 java.lang.UnsatisfiedLinkError: No implementation found for int

    出现  java.lang.UnsatisfiedLinkError: No implementation found for int, 如果文件都已准备就绪,还出现这样的异常很有可能 是因为 调用这个so的java程序的包名与so包名不一至导致。 注意,这里的java程序的包名并不是 androidmainfest.xml里的包名,而是单纯调用这个so库的这个java文件的包名。

    2024年01月18日
    浏览(47)
  • 【OpenCV】no opencv_java*** in java.library.path 和 java.lang.UnsatisfiedLinkError: org.opencv.videoio.

    目录 目录 1. 报错信息 no opencv_java*** in java.library.path 1.1. 解决方法 no opencv_java*** in java.library.path 2. 报错信息 java.lang.UnsatisfiedLinkError: org.opencv.videoio.VideoCapture.VideoCapture_4(I)J 2.1. 解决方法 java.lang.UnsatisfiedLinkError: org.opencv.videoio.VideoCapture.VideoCapture_4(I)J no opencv_java451 in java.libr

    2024年02月06日
    浏览(37)
  • nested exception is java.lang.NoClassDefFoundError

    出现这种问题,一般都是jar有问题,排查是哪个jar包,重新导入maven仓库一下就行了,有的时候需要把原来仓库里的包删掉,重新打包,有的时候要切换分支,到其他分支打包。 打包时候没有打进去,pom文件添加:

    2024年02月16日
    浏览(40)
  • 已解决 nested exception is java.lang.StackOverflowError

    已解决 nested exception is java.lang.StackOverflowError nested exception is java.lang.StackOverflowError 对于错误消息\\\"nested exception is java.lang.StackOverflowError\\\",通常表示程序递归调用过多,导致栈溢出。 下滑查看解决方法 下面是一些可能的解决方法: 检查递归方法:检查代码中是否存在无限递归

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包