接入X5内核后出现32位无法在64位机器运行的问题(java.lang.reflect.InvocationTargetException; cause: java.lang.Unsatisfied)

时间:2021-11-20 03:48:10
再接入X5内核后,有大部分手机是好的,有些手机会报
java.lang.reflect.InvocationTargetException; cause: java.lang.UnsatisfiedLink的错误,查阅资料后发现是32位无法在64位机器运行的问题。
29106/com.fanmei E/art: dlopen("/data/data/com.tencent.mm/app_tbs/core_share/libwebp_base.so", RTLD_LAZY) failed: 
dlopen failed: "/data/data/com.tencent.mm/app_tbs/core_share/libwebp_base.so" is 32-bit instead of 64-bit
目前X5浏览器官网只提供32位的so文件需要在提供64位的so文件,要不然很容易与友盟还有支付宝的热修复进行冲突,我们需要X5浏览器在
提供一个64位的so文件就可以了,现在如果我把支付宝的64位的热修复so文件去掉,我们的APP直接crash,无法启动起来


解决方法:我这存在的原因是armeabi中.so库多个,32-bit so库 与64-bit so冲突,我是删除32-bit so库后(引用:是因为你的jni目录有 64位的目录,
那样64位的机器就会去对应的目录找so文件,而你又把32位的文件放在了64位的目录里),问题解决了,另外必须配置
defaultConfig {......    ndk {abiFilters "armeabi""armeabi-v7a""x86""mips"    }}

这时会报错,因为gradle的配置中,并不知道是否要做操作系统的兼容,这时只要在gradle.properties文件中加上
Android.useDeprecatedNdk=true

就可以了。