天天看點

Android 開發 so庫檔案找不到不錯

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.imobi.callblocker-2/base.apk"],nativeLibraryDirectories=[/data/app/com.imobi.callblocker-2/lib/arm, /data/app/com.imobi.callblocker-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn't find "libwebrtc.so"

遇到這個問題,真的很服氣,我的上司很長時間沒弄出來,這是我第一次解決了他未解決的問題,感覺自己not the same。哈哈,我希望自己能獨立,快速的獨立。  not the same。

下面說下解決辦法 :

這是引用so庫時的錯誤,找不到so檔案。

1.首先把在armeabi的同目錄下建一個檔案夾armeabi-v7a,把armeabi的檔案copy一份到armeabi-v7a,build一下項目。

2.

在defaultConfig中加入

ndk {
    // 設定支援的SO庫架構
    abiFilters 'armeabi' ,'arm64-v8a'
}      

在後期的開發中,我又遇到了同樣的問題,由于問題的不斷地深入我不斷的加深對于引入so庫檔案的了解。上述的方法隻是巧合能解決nexus5的手機,但是對于三星的手機是不可行的,原因是由于每種手機的cpu型号不行,所對應的so庫檔案打包時不同。

具體的說一下:其實手機的cpu型号是不同的,有很多的平台

1.armeabiv-v7a: 第7代及以上的 ARM 處理器。2011年15月以後的生産的大部分Android裝置都使用它.

2.arm64-v8a: 第8代、64位ARM處理器,很少裝置,三星 Galaxy S6是其中之一。

3.armeabi: 第5代、第6代的ARM處理器,早期的手機用的比較多。

4.x86: 平闆、模拟器用得比較多。5.x86_64: 64位的平闆。這是不同的平台,我們都知道在版本疊代的過程中必須考慮相容性的問題

在你的程式中首先找的高版本的arm,現在的情況是從v8a開始v7a再到armeabi,再到平闆。

你可以在androidstudio中檢視你引用的so庫,在你的項目中你自己引用的so庫不是全部的,你依賴jar包中也會引用so庫。下面接受檢視你的項目中引用的全部so庫,如下圖:

Android 開發 so庫檔案找不到不錯

按照圖中的仙姑目錄打開,輕按兩下1處,找到2處的lib檔案目錄,檢視引入so庫檔案的全部詳情,so庫的打包與cpu平台型号是對應的,不能随便的對應。

假如你有2個so庫檔案名字為1,2不在同一目錄,app項目會根據從高版本查找,一旦找到有一個so引假如是:1,就不會在向下尋找,2在低版本的arm平台就會報錯,找不到2.so這個庫,如果你看懂了上述的叙述,你肯定就會知道怎樣解決,又不明白的歡迎留言,我都線上的。