本文主要是介绍UnsatisfiedLinkError: dlopen /data/data/package/app_jni_lib/libxxx.so is 32-bit instead of 64-bit,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
昨天掉到一个大坑里,本来说要增加arm64的支持,心想这还不简单,在libs目录下新建一个arm64-v8a的目录,然后对应的libxxx.so放进去就万事大吉了。提完patch,在三星Galaxy S6上试了一下没问题,就上线了~~ 结果刚上GP半小时,出现好几十个崩溃,评分刷刷刷往下掉,吓死宝宝了。。。报的错都是说库是32位的:
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/<package>/app_jni_lib/libxxx.so" is 32-bit instead of 64-bitat java.lang.Runtime.load(Runtime.java:331)at java.lang.System.load(System.java:981)
难道放错库了?用“file libxxx.so”检查了一下,确定我放的是64位版本的库:ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
另外,如果放错库的话,三星Galaxy S6上也应该会崩啊?又仔细看了下后台,发现这些出崩溃的手机没有一个是三星的,全部都是小米或者华为。于是找了台小米5过来试了一下,果然一启动就崩。
看了下加载这个so的代码,发现不是直接用System.load()来加载的,而是先判断/data/data/<package>/lib目录下有没有这个so,有的话就直接加载,没有的话就从apk的zip包里把lib/armeabi下面的库拷贝到/data/data
这篇关于UnsatisfiedLinkError: dlopen /data/data/package/app_jni_lib/libxxx.so is 32-bit instead of 64-bit的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!