Android JNI:關(guān)于導入Realm后報錯找不到其它類庫的so

今天遇到一個坑,項目里之前有jni庫的支持,原本運行正常,在導入Realm后運行時提示找不到so庫 報錯信息如下:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com..-1/base.apk"],nativeLibraryDirectories=[/data/app/com..-1/lib/arm64, /data/app/com..-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "****.so"

1.分析問題:

查看日志可得知,應用在運行時去加載本地動態(tài)鏈接庫時發(fā)現(xiàn)找不到,而這個路徑很明顯是arm64和arm64-v8a,指明我的手機是arm64位的,并且我的項目中包含這個arm64的動態(tài)鏈接庫文件夾,當需要加載本地庫時系統(tǒng)會找到這個文件夾里,但是發(fā)現(xiàn)并沒有,于是報錯。

2.跟蹤問題:

觀察我原來的項目中其他的動態(tài)鏈接庫,發(fā)現(xiàn)只有armeabi、armeabi-v7a和x86,確實沒有arm64,但是也并沒有arm64的動態(tài)鏈接庫文件夾,查看build文件:

在對應module的build-intermediates-transforms文件夾下.png

發(fā)現(xiàn)原來是realm有這個版本的so庫,問題就是realm的多版本so庫所導致的。

3.解決辦法

如果手動把realm重新編譯 去除這個so庫是可以的,但是太過復雜,依靠我們強大的gradle進行打包配置即可。
在對應的build.gradle的android{}中添加如下代碼即可完美解決:

packagingOptions { exclude "lib/arm64-v8a/librealm-jni.so"}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容