问题描述
开发某视频通话项目时,引入了一款SDK,开发过程中看到提示java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/cn.********-1/lib/arm64/libGlobal.so" is 32-bit instead of 64-bit
问题分析
错误信息说在工程中找不到64位的so文件,32位的不能代替。
遇到这个问题应该就不知所措了,明明都是按照三方文档上的步骤导入的,怎么还会有报错,这个问题出现的原因就是有些三方的架包只提供了32的so文件,而没有提供64位的so文件。
说到这,首先想到的办法就是从网上在下载个64位的so文件不就完了,
问题就来了,有些网上找的64位的不一定是三方官方提供的,那么就不能去使用和兼容。
之前我就遇到过使用高德地图和二维码扫描Qrcode造成的冲突,Qrcode是一个module做为app工程的library,因为高德地图必须要在armeabi-v7a文件夹下放置so文件,而做为library的Qrcode则同样也需要armeabi-v7a不然编译报错,但恰巧Qrcode只有32位的,这样就尴尬了,后来查询了资料终于解决了这个问题,
问题解决
- 就是在自己工程app目录下build.gradle加上一句话:
android{
ndk{
abiFilters "armeabi"
}
}
- 这时如果还是有报错,可能是因为gradle的配置中,并不知道是否要做操作系统的兼容,这时只要在gradle.properties文件中加上Android.useDeprecatedNdk=true;这样就搞定了。