java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/***/base.apk"],nativeLibraryDirectories=[/data/app/***/lib/arm64, /data/app/***/base.apk!/lib/arm64-v8a,
/vendor/lib64, /system/lib64]]] couldn't find "libweibosdkcore.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at com.sina.weibo.sdk.net.HttpManager.(HttpManager.java:83)
at com.sina.weibo.sdk.net.NetUtils.internalHttpRequest(NetUtils.java:46)
at com.sina.weibo.sdk.cmd.WbAppActivator.requestCmdInfo(WbAppActivator.java:121)
at com.sina.weibo.sdk.cmd.WbAppActivator.access$4(WbAppActivator.java:110)
at com.sina.weibo.sdk.cmd.WbAppActivator$1.run(WbAppActivator.java:80)
at java.lang.Thread.run(Thread.java:818)
最近项目中遇到了这个bug,提示在arm64、arm64-v8a下找不到libweibosdkcore.so,因为项目中只适配了"armeabi-v7a", "armeabi", "x86"平台,因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我们只适配了这三个。但是最近后台统计在arm64的机器上,提示libweibosdkcore.so文件找不到,我记得这个应该是向下兼容的,但是出现这种情况很奇怪,于是我就在网上找了找答案。
解决方法:
abiFilters
在自己项目的modle的build.gradle中的defaultConfig里添加上这么一句:
ndk { abiFilters "armeabi-v7a", "armeabi", "x86" // 指定要ndk需要兼容的架构(这样其他依赖包里arm64,arm64-v8a,arm-v8...之类的so会被过滤掉) }
defaultConfig { ..... ndk { abiFilters "armeabi-v7a", "armeabi", "x86" } }
这句话的意思就是指定ndk需要兼容的架构,把除了以上指定的兼容包都过滤掉,只剩下指定的文件夹。用了这个方法之后,确实解决了问题。
看了下官方文档,文档上是这么说的,可以参考一下