分析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-bitat 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-v8aC:\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相关推荐
- Android之解决java.lang.UnsatisfiedLinkError: dlopen failed: ××××.so: has text relocations
1.问题 项目导入别人的so,有个项目没问题,但是这个有问题,运行提示这个错误 java.lang.UnsatisfiedLinkError: dlopen failed: ××××.so: has ...
- 推荐两个Android模拟器,轻松解决模拟器调试java.lang.UnsatisfiedLinkError: dlopen failed~~
转载请声明出处:http://blog.csdn.net/u013067166/article/details/52155380 导读:不知道大家有没有做过JNI开发.地图开发等等,在 ...
- Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.google.android.webview-2/li
最近的项目,部分华为手机用户反馈内部网页无法打开.也就是WebView无法正常使用. 通过查看友盟的错误统计信息,如下图所示: Caused by: java.lang.UnsatisfiedLink ...
- System.err: java.lang.UnsatisfiedLinkError: dlopen failed: library “libc++_shared.so“ not found
Android Studio 配置OpenCV 的时候出现这样的提示 黄色警告libc++_shared.so" not found : System.err: java.lang.Unsa ...
- java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/***.so: has text relocations
最近接手一个古老的项目维护-- 报错信息: 2020-04-23 19:15:44.652 19941-20327/xxx E/AndroidRuntime: FATAL EXCEPTION: Asy ...
- java.lang.UnsatisfiedLinkError: dlopen failed: quot;/data/app/lib/arm/libiProtectPAB.so invalid
这个关于android的第三方或者是本库的.so文件找不到或者是无效问题所在.看了很多java.lang.UnsatisfiedLinkError:错误信息大多讲的是不能找到.so文件,,而这里却是. ...
- java.lang.UnsatisfiedLinkError: dlopen failed: /data/xxxxx.so has bad ELF magic
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/xxxxx.so" has bad ELF magic 原因是引入的.s ...
- java.lang.UnsatisfiedLinkError: dlopen failed: file offset for the library /data/app/com.beiya.litt
概述 在开发的时候我手贱,把so包删除了,然后按了恢复就出现文件大小和之前的不一样,就出现这个错误了. java.lang.UnsatisfiedLinkError: dlopen failed: f ...
- 解决动态加载java.lang.UnsatisfiedLinkError: dlopen failed * is 32-bit instead of 64-bit 报错
用动态加载的方式拉起插件apk,由于插件apk中有so文件,于是出现错误 E/AndroidRuntime: FATAL EXCEPTION: Thread-7Process: androidx.xx ...
最新文章
- 对象冒充_使用您的精神探照灯进行冒充冒名顶替综合症
- GOS系列之删除附件
- python的22个基本语法
- 更换ip地址_手机怎么改ip地址
- rails 构建 API
- win7更改用户登录或注销方式的操作教程
- 转:flex [Inspectable]标签详解
- Tensorflow学习笔记---1--Python基本操作
- 3、数据库的事务、并发和锁机制
- CNVD 与 CNNVD 的区别
- 将自己的图片做成cityscape格式(自用)
- 南阳oj S + T
- 轻松打造xfce4轻快桌面
- Docker + Gitlab + Gitlab CI(三)
- 【经验分享】BMPR文件及其打开软件Balsamiq Wireframes的下载和安装
- 关于12378投诉热线的正确打开方式
- opencv获取灰度图像的像素值
- 薛老师软考高项学员:2016年4月11日作业
- 神经网络芯片概念股,图神经网络预测股票
- 支付宝小程序获取用户的user_id案例
热门文章
- 两个超长正整数的加法c语言,二个超长正整数的相加
- oracle 云服务器cpu升级,Oracle 10g RAC 升级(CPU Update)之--升级CRS
- C++编程进阶2(编译器在类内默认生成的函数讨论以及纯虚析构函数)
- ege函数库_EGE图形库|EGE图形库下载v12.11 最新版 附使用教程 - 欧普软件下载
- Spring Cloud-Honghu Cloud分布式微服务云系统(一)
- win7下命令行提示符从C盘进入E盘的文件夹下
- 替换libc中的内存分配函数
- 低压成套ggd设备详细报价
- 用animation的steps属性制作帧动画
- bootstrap ui