分析Android :java.lang.UnsatisfiedLinkError: dlopen failed * is 32-bit instead of 64-bit
Crash 日志:
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.ireader.plug.sdk/ireader_plugins/lib/armeabi/lib***.so"
is 32-bit instead of 64-bit
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1657)
问题分析:
首先看log, 报错为:so打开失败,因为lib***.so 是32位的so,而不是64位的。
补充:
Android 程序 运行起来,要么只加载32位的so, 要么只加载64 位的so. 是不能混合加载的。
常见的两种情况如下:
第一种情况:
对于一个android程序,如果程序没有用到任何so,假如程序跑在64位的手机上,虚拟机默认加载64位的so。这时候,如果你加载了32位的so,就会报错。反之,如果程序跑在32位的手机上,虚拟机默认只加载32位的so.
可能有同学有疑问,既然我的程序里面没有任何的so, 跑在了64位的手机上,这种情况下怎么会加载32位的so呢?我的程序里面是没有so 的啊。没错,你的apk 里面是没有任何的so,但是如果你的项目中使用了插件技术,插件apk 里面有32 位的so,这时候就会挂掉了。
解决方法:
在你的项目里面建立一个armeabi 的文件夹,里面放一个文件。文件名字叫做fix.so。这个so 可以是0kb,但是一定要有。这样,程序跑在64位的手机上,发现你只有armeabi 的文件夹,那么就会使用32 位的虚拟机,这时候,加载你插件里面的so,就不会有问题了。
第二种情况:
如果程序里面有so, 并且有arm64-v8a 或者x64 的文件夹,也有armeabi 的文件夹,运行在64位的手机上,会默认使用arm64-v8a 或者x64 文件夹里面的so. 这时候,如果有些so 没有arm64-v8a ,就会报错找不到so。 虽然你在armeabi 文件夹里面有。
如果是这种情况,那么直接把 arm64-v8a 的so 删除掉,只留下armeabi 的so。 因为armebai 兼容所有类型的处理器。当然你也可以把缺少的64位的so 编译一下。
我们项目具体场景:
我们是做插件sdk 给第三方接入的。我们会让第三方接入一个apk文件,里面只有armeabi 的so.
还有一个libmerge.so 用于插件增量更新。但是有些厂商不愿意动态更新,我们定的方案是如果不需要增量更新这个功能,程序里面可以没有libmerge.so 。
早期的时候,手机还都是32位的,所以,没有问题。但是现在都是64位的手机,有的厂商自己apk 没有任何的so, 跑在64为手机上,上来就挂。java.lang.UnsatisfiedLinkError: dlopen failed * is 32-bit instead of 64-bit
他们反馈在有些手机会出现,有些手机可以正常运行。当然,可以运行的都是32位手机,不可以的都是64位的手机。
这时候,我们让厂商放在armeabi 文件夹下一个fix.so。虽然是一个空文件,但是程序就可以跑起来。这样,程序跑在64位的手机上,发现你只有armeabi 的文件夹,那么就会去加载32 位的so,这时候,加载你插件里面的so,就不会有问题了。
知识补充:
如何查看android cpu是32位还是64位?
adb shell getprop ro.product.cpu.abi
C:\Users\zy>adb shell getprop ro.product.cpu.abi
arm64-v8a
C:\Users\zy>adb shell getprop ro.product.cpu.abi
armeabi-v7a
可以看到手机默认的so 文件夹。arm64-v8a 是64位的。另外,一般手机内存超过4G 都是64位的,因为32支持的最大内存是4G.
参考:
https://www.cnblogs.com/janehlp/p/7473240.html
分析Android :java.lang.UnsatisfiedLinkError: dlopen failed * is 32-bit instead of 64-bit的更多相关文章
- java.lang.UnsatisfiedLinkError:dlopen failed: “**/*/arm/*.so” has unexpected e_machine: 3
转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10458448.html 今天在做APP的时候使用so库,可结果一加载so库的时候便发生了这个莫名其妙的错 ...
- java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/xxx/lib/arm/liblame.so: has text relocations
最近在写本地录音转码过程中引入了liblame.so,我这边用了不同系统版本的手机测试本地录音都没有出现问题,但是有一天,同事在测试的时候,出现了以下错误: 09-13 17:32:29.140 26 ...
- java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libjni_i
出错log:java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libskytvjni.so" ...
- React java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.edaixi.activity/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.edaixi.activity, PID: 3659 at java.lang.Runtime ...
- java.lang.UnsatisfiedLinkError: dlopen failed: library "libsqlite.so" not found
项目在7.0以下系统的手机上运行正常,但在7.0的手机上运行异常. 出现这个问题的原因是:从 Android 7.0 开始,Android系统将阻止应用动态链接非公开 NDK 库. 解决方法有两种 第 ...
- Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader......couldn't find "libweibosdkcore.so
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ ...
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...
- android 使用讯飞人脸识别api报错:java.lang.UnsatisfiedLinkError
1.在做一个人脸识别的项目,使用的是讯飞的api,编辑器为AS2.0,运行时报如下错误: FATAL EXCEPTION: main Process: com.adm ...
- Android (二维码)关于java.lang.UnsatisfiedLinkError的小案例
在许多项目中我们都会用到第三方动态库.so文件,但是往往会引来很多烦恼,比如:Java.lang.UnsatisfiedLinkError - ::-/com.ishow.scan E/Android ...
随机推荐
- Spring Framework5.0 学习(1)—— 用Gradle构建一个Java Project
1.0 安装Gradle,参考之前文章<Gradle入门实战(Windows版)> 2.0 使用gradle 快速生成一个Java project gradle init --type ...
- VS2013安装部署过程详解
注意:缺少安装部署的小伙伴,看上一篇有详细介绍 程序在“Release”平台下编译运行没有错误 第一步:“新建”------“项目”------“其他项目类型”------“安装部署”------“I ...
- php 处理微信账单
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,微信账单接口返回为一个字符串类似如下结果: 交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单 ...
- Web网站高并发量的解决方案
摘要: 一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站相 ...
- HTML CSS STYLE USER Font Awesome Definition Content Attribute
在css样式表中写样式: 其中content使用图标类对应的字符编码如下
- 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)
题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...
- 【浏览器-Safari-网页开发指南】官方Sarari开发指南译文
Safari是一个功能比较完整的浏览器.它支持所有按照W3C标准HTML,CSS,Javascript开发的网页. 当然,让网站正常访问只是我们的初级目标.开发者应该致力于给用户提供更好的用户体验.比 ...
- 每日笔记---使用@ConfigurationProperties读取yml配置
每日笔记---使用@ConfigurationProperties读取yml配置 参考地址 https://www.cnblogs.com/mycs-home/p/8352140.html 1.添加 ...
- js中定时器使用方法经验总结
前言,最近在做一个音频播放项目的时候,碰到播放时间精度的问题,捣鼓了几天,最终巧妙的运用定时器去降低了错误发生频率 正题,下面是对定时器的使用总结,如有错误之处,请读者加以纠正. 延迟执行(1次) s ...
- JSON API免费接口 各种提供JSON格式数据返回服务网站的API接口
这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID& ...