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的更多相关文章

  1. java.lang.UnsatisfiedLinkError:dlopen failed: “**/*/arm/*.so” has unexpected e_machine: 3

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10458448.html 今天在做APP的时候使用so库,可结果一加载so库的时候便发生了这个莫名其妙的错 ...

  2. java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/xxx/lib/arm/liblame.so: has text relocations

    最近在写本地录音转码过程中引入了liblame.so,我这边用了不同系统版本的手机测试本地录音都没有出现问题,但是有一天,同事在测试的时候,出现了以下错误: 09-13 17:32:29.140 26 ...

  3. java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libjni_i

    出错log:java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libskytvjni.so" ...

  4. 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 ...

  5. java.lang.UnsatisfiedLinkError: dlopen failed: library "libsqlite.so" not found

    项目在7.0以下系统的手机上运行正常,但在7.0的手机上运行异常. 出现这个问题的原因是:从 Android 7.0 开始,Android系统将阻止应用动态链接非公开 NDK 库. 解决方法有两种 第 ...

  6. Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader......couldn't find "libweibosdkcore.so

    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ ...

  7. 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 ...

  8. android 使用讯飞人脸识别api报错:java.lang.UnsatisfiedLinkError

    1.在做一个人脸识别的项目,使用的是讯飞的api,编辑器为AS2.0,运行时报如下错误: FATAL EXCEPTION: main                  Process: com.adm ...

  9. Android (二维码)关于java.lang.UnsatisfiedLinkError的小案例

    在许多项目中我们都会用到第三方动态库.so文件,但是往往会引来很多烦恼,比如:Java.lang.UnsatisfiedLinkError - ::-/com.ishow.scan E/Android ...

随机推荐

  1. ListView实现下拉刷新(三)实现下拉刷新

    该准备的东西都已经准备好了.在这篇文章里,我们就开始实现下拉刷新功能吧. 一.大体的逻辑分析 我们来简单分析一下需要做的逻辑吧.首先分析头布局有几种状态.不下拉时,为正常状态,此时头布局隐藏.下拉到一 ...

  2. Linux 查看所有登录用户的操作历史

    在linux系统的环境下,不管是root用户还是其它的用户只有登陆系统后用进入操作我们都可以通过命令history来查看历史记录,可是假如一台服务器多人登陆,一天因为某人误操作了删除了重要的数据.这时 ...

  3. IE11,Chrome65,Firefox58 的webdriver驱动下载,调用浏览器打开网址

    一.环境及需求 1.1环境 Windows10 + Python 3.6.4 + selenium 3.141 1.2需求 工作需要实现一个网页自动登录的操作,决定使用selenium+python实 ...

  4. ecshop 中如何禁用右键和F12

    找到 网站根目录/themes/js/common.js,在最后加入如下代码: //禁用右键和F12 //方法一 document.oncontextmenu = function () { retu ...

  5. 二十九、利用 IntelliJ IDEA 进行代码对比的方法

    我们会有这样的需求,即:想对比出两个不同版本代码的区别.如何实现? 第 1 种:如果我们是从 SVN 检出的项目,并且想比较本地代码与从 SVN 检出时的代码相比都有那些区别,可以按如下步骤操作, 如 ...

  6. 关于JavaScript中省略元素对数组长度的影响

    在学习<JavaScript权威指南>第六版的第7.1节中通过数组直接量创建数组时,我们可以不给数组的某个元素赋值,它就会使undefined.虽然是undefined,但我们调用数组对象 ...

  7. Adnroid studio 无法 Build APK(s)

    报错 Error:java.nio.file.AccessDeniedException: C:\Program Files\Android\android-sdk-windows\.android\ ...

  8. lead over 和 lag over

    今天在熟悉项目的某个功能模块时,查看mybatis的映射文件内发现这样的一串sql: (T.NET_VALUE - LEAD(T.NET_VALUE)OVER(ORDER BY T.ESTIMATE_ ...

  9. 搜索 水题&&错误集锦

    引子: 本以为搜索的题目老师也不会检查,结果今天早上loli慢悠悠的说:“请同学们提交一下搜索的题目~”,顿时心旌摇曳,却也只能装作镇定自若的样子,点了点头.. 然后就开始了今天的疯狂做题,虽说题目都 ...

  10. ubuntu查找端口和kill

    查看 : netstat -anp | grep 8080 结束: kill -9 进程号