1. 程式人生 > >【Android】so庫缺失--UnsatisfiedLinkError

【Android】so庫缺失--UnsatisfiedLinkError

第一次引入多個so庫,果斷報了UnsatisfiedLinkError錯誤

先引入的DMD(牆外的一個全景拍照sdk)的so庫
長這樣:
DMDso庫

只支援兩個平臺:armeabi和armeabi-v7a,除錯正常。

然後引入百度地圖so庫
長這樣:
百度地圖so庫

支援的機稍微多了一些,五個平臺。
把兩堆檔案合併,開始除錯。
除錯百度地圖功能時正常,但突然就死了。搜了一下,說有的so庫是先編譯再載入,除錯的時候正在載入,載入到這個地方就卡住了。

報錯型別:UnsatisfiedLinkError

日誌說找不到DMD的so庫,大眾的解釋是:如果so庫有多個資料夾,那麼每個資料夾下都應該有一個對應so檔案。但DMD在其他三個平臺的資料夾下沒有相應的so檔案,所以,報了個找不到。

解決方法

在build.gradle(app)檔案中新增平臺過濾器
android {
    ······
    buildTypes {
        release {
            ndk {
                abiFilters = ["armeabi"]
            }
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
debug { ndk { abiFilters = ["armeabi"] } minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }

這裡的 abiFilters = [“armeabi”] 指只支援armeabi平臺,其他的過濾掉,讓系統不要再去找了。
這樣就解決了。