今天遇到一個坑,項目里之前有jni庫的支持,原本運行正常荞估,在導(dǎo)入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.分析問題:
查看日志可得知剩膘,應(yīng)用在運行時去加載本地動態(tài)鏈接庫時發(fā)現(xiàn)找不到,而這個路徑很明顯是arm64和arm64-v8a绑青,指明我的手機(jī)是arm64位的诬像,并且我的項目中包含這個arm64的動態(tài)鏈接庫文件夾,當(dāng)需要加載本地庫時系統(tǒng)會找到這個文件夾里闸婴,但是發(fā)現(xiàn)并沒有坏挠,于是報錯。
2.跟蹤問題:
觀察我原來的項目中其他的動態(tài)鏈接庫掠拳,發(fā)現(xiàn)只有armeabi癞揉、armeabi-v7a和x86,確實沒有arm64,但是也并沒有arm64的動態(tài)鏈接庫文件夾喊熟,查看build文件:
發(fā)現(xiàn)原來是realm有這個版本的so庫柏肪,問題就是realm的多版本so庫所導(dǎo)致的。
3.解決辦法
如果手動把realm重新編譯 去除這個so庫是可以的芥牌,但是太過復(fù)雜烦味,依靠我們強(qiáng)大的gradle進(jìn)行打包配置即可。
在對應(yīng)的build.gradle的android{}中添加如下代碼即可完美解決:
packagingOptions { exclude "lib/arm64-v8a/librealm-jni.so"}