在集成AndFix時,報java.lang.UnsatisfiedLinkError錯誤,經研究發現,AndFix gradle依賴裏面只包含armeabi與x86架構so文件,如果我們的項目裏包含除了這個兩個架構以外的架構,會導致AndFix拋異常。
出錯原因:安卓手機默認查找到該cpu下合適的庫時,不會繼續查找對應的兼容庫。
比如:項目裏包含arm64-v8a,64位機器默認去查找arm64-v8a目錄下是否有合適的64位庫,而不會去查找其他目錄下的庫
解決方式:
第一種,項目裏只包含armeabi與x86架構
第二種,在其他架構文件裏面加入對應的AndFix so文件,可以前往github下載
在第一個項目按照上面的方法解決了,在集成另一個項目時按照上面的方法集成,發現還是一直拋java.lang.UnsatisfiedLinkError異常,無法讀取so庫。經過一段時間研究發現,該項目集成了Facebook的fresco圖片庫,該庫裏面配置了abi:
splits {
abi {
enable true
reset()
include 'x86', ‘x86_64’,’arm64-v8a', 'armeabi-v7a', 'armeabi'
universalApk false
}
}
fresco的draw-pipeline考慮了多種cpu架構的機器,配置瞭如上架構,所以arm64-v8a的手機就讀取arm64-v8a目錄下的so庫,而不回去讀取其他庫,導致讀取不到其他目錄下的so庫。
解決方案:
第一種:註釋掉draw-pipeline的的abi配置
第二種:配置idk abiFilters(推薦,可以處理其他庫導致該問題)
android {
defaultConfig {
ndk {
// 設置支持的 SO 庫構架,注意這裏要根據你的實際情況來設置 abiFilters 'armeabi'// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
}
}
如果在添加 “abiFilter” 之後 Android Studio 出現以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin
在項目根目錄的 gradle.properties 文件中添加:
android.useDeprecatedNdk=true