解決Android第三方庫缺少xxx.so

問題描述

Android 使用多個包含 .so 的第三方庫,應(yīng)用崩潰。日志顯示找不到 xxx.so

問題分析

現(xiàn)在很多第三方庫都是通過aar方式引用的,里面也包含了 .so 庫。這些so會被編譯進(jìn)apk的lib文件夾下。apk解壓后可能類似下面:

這里寫圖片描述

手機(jī)在使用這些so時,會先根據(jù)自身的CPU加載自己優(yōu)先支持的架構(gòu)的庫,如果發(fā)現(xiàn)架構(gòu)對應(yīng)的文件夾存在,則會將該文件夾下的 so 推入 apk 安裝目錄的lib文件夾下。例如:armeabi-v7a 的手機(jī)優(yōu)先支持 armeabi-v7a,如果armeabi-v7a不存在,則會加載 armeabi 。如果在armeabi-v7a文件夾存在,但是 so 庫不全,就會報(bào)錯。

問題解決

遇到這種情況,可以優(yōu)先嘗試補(bǔ)全對應(yīng)的 .so ,如果行不通,就需要移除 apk 中的 armeabi-v7a 文件夾,讓手機(jī)加載 armeabi 的庫。
通過 aar 方式依賴的庫,很多 .so 庫會直接包含在 aar包內(nèi),我們無法更改他們,但是可以通過 gradle 設(shè)置最終輸出到 apk 的的 so。

在 app 的 build.gradle 中指定位置添加如下代碼:

android {
    //省略...
    defaultConfig{
        ndk{
            //輸出armeabi的so
            abiFilters "armeabi"
        }
    }
    //省略...
}

設(shè)置完后,重新編譯下 apk,可以看到 apk/lib 中只包含 armeabi 了。

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

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