AAR和外部項目同時都有so文件導致錯誤的解決辦法

接觸到過Jni的童鞋們應該看著個crash會比較眼熟,對,就是so文件找不到,而引發的錯誤。

“java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader..............couldn't find "xxxxxxx.so"”

crash

當時遇到這個問題是我很疑惑,報錯報的是外部項目的so文件找不到(這里簡稱外so),AAR里的so文件(這里簡稱內so)卻沒有報錯,可我確實在引入了這個AAR之后,編譯生成的APK報錯了。

第一個想法:會不會是本身gradle本身不支持編譯生成APK時將內so文件打包進APK呢?

跟著我就去谷歌大法了一波,結果還真的在某些gradle版本里是不支持打包的,需要自身在外部項目里加入內so。ANDROID動態加載 使用SO庫時要注意的一些問題?但有個問題,我這邊是最新你的gradle,而且報錯報的是外so找不到,那就pass掉了這種可能。但我還是嘗試性地將內so復制到外部的lib里去編譯了一遍,徒勞。。。。

第二個想法:會不會是so文件重名了?

顯然不會,我還不至于在這個問題上折騰那么久。


那么問題來了,到底是什么原因呢?

通過分析crash日志,我發現一個問題:

nativeLibraryDirectories=[/data/app/xxx-1/lib/arm64, /data/app/xxx-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]

我外部的lib里并沒有那么多文件夾啊!!!!

這個就是crash的原因所在了。

當AAR內部的so文件類型比外部多時,會導致外部的so文件找不到。

所以果斷的剔除了AAR中不需要的so文件夾“arm64”,“arm64-v8a”,“x86”。

再次編譯,OK,齊活了。88,希望能幫助到你們。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容