Android 集成AndFix報java.lang.UnsatisfiedLinkError

在集成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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章