Android 系統本質是一個通過改造的 Linux 系統,so庫是Linux系統上使用的共享庫(相似windows上的dll)。最先,Android 系統只支持 ARMv5 的 CPU 構架,隨着 Android 系統的發展,又加入了 ARMv7 (2010), x86 (2011), MIPS (2012), ARMv8, MIPS64 和 x86_64 (2014)。每一種 CPU 構架,都定義了一種 ABI(Application Binary Interface),ABI 決定了二進制文件如何與系統進行交互。 html
下面樣例表示支持armeabi、armeabi-v7a和arm64-v8awindows
defaultConfig {
ndk {
abiFilters 'armeabi','armeabi-v7a','arm64-v8a'
}
}
複製代碼
其實這個能夠不設置,這樣編譯時,就會將項目裏全部依賴資源包裏的so庫都打到最終的apk裏。 bash
可是有些平臺,咱們是不須要支持的,若是不刪除的話,apk就臃腫了。若是那些so庫是咱們本身編譯出來的,那能夠直接在工程中刪除對應so文件,可是若是是第三方提供的,就很差刪除了,因此就須要使用abiFilters來過濾了。若是須要針對不一樣的平臺出不一樣的包,能夠在productFlavors裏進行設置,可參考文章:blog.csdn.net/hknock/arti…架構
看上上面的描述,覺得新增一個so庫文件能夠隨便根據須要適配的目錄放,就錯了。若是你有庫文件在armeabi裏有,可是armeabi-v7a目錄下沒有,那麼運行在V7a的架構時,就會出現找不到so庫文件的狀況。具體描述參照:Android 關於arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容問題。spa
安卓開發技術分享: blog.csdn.net/yinxing2008… .net