設定apk只打包指定架構的so

2021-09-27 04:28:27 字數 704 閱讀 4443

問題描述

android 使用多個包含 .so 的第三方庫,應用崩潰。日誌顯示找不到 ***.so。

問題分析

現在很多第三方庫都是通過aar方式引用的,裡面也包含了 .so 庫。這些so會被編譯進apk的lib資料夾下。apk解壓後可能類似下面:

手機在使用這些so時,會先根據自身的cpu載入自己優先支援的架構的庫,如果發現架構對應的資料夾存在,則會將該資料夾下的 so 推入 apk 安裝目錄的lib資料夾下。例如:armeabi-v7a 的手機優先支援 armeabi-v7a,如果armeabi-v7a不存在,則會載入 armeabi 。如果在armeabi-v7a資料夾存在,但是 so 庫不全,就會報錯。

問題解決

遇到這種情況,可以優先嘗試補全對應的 .so ,如果行不通,就需要移除 apk 中的 armeabi-v7a 資料夾,讓手機載入 armeabi 的庫。

通過 aar 方式依賴的庫,很多 .so 庫會直接包含在 aar包內,我們無法更改他們,但是可以通過 gradle 設定最終輸出到 apk 的的 so。

android 

}//省略...

}

設定完後,重新編譯下 apk,可以看到 apk/lib 中只包含 armeabi 了。

android 依賴只編譯不打包到apk中

總結 具體每個什麼意思,大家谷歌一下就知道了,這裡不在陳述 implementation和api是取代之前的compile的,其中api和compile是一樣的效果,implementation有所不同,通過implementation依賴的庫只能自己庫本身訪問,舉個例子,a依賴b,b依賴c,如果b...

APK打包流程

官網給了我們一張非常簡單的編譯 打包 apk生成內容以及簽名的。大體介紹了從project到執行到裝置或者模擬器的乙個大體流程,我們也從中看到乙個完整的apk包含如下內容 乙個或多個dex檔案 resources.arsc 未編譯的資源檔案以及androidmanifest.xml檔案等等 由and...

Ant打包生成apk

由於專案中需要根據不同的渠道來進行打包,通過eclipse打包過程非常繁瑣,並且因為eclipse打包對記憶體要求比較高,經常會出現打包過程中eclipse記憶體溢位的問題。後面了解到ant是乙個非常不錯的工具,於是翻閱了很多文章來進行了解。不斷嘗試下終於打包成功。環境 eclipse apache...