在android studio2.2之前采用的是ndk編譯,在build.gradle中的
android{
buildTypes{
ndk{
abiFilters "armeabi"
}
}
}
就可以過(guò)濾掉很多市場(chǎng)占有率極少的cpu架構(gòu)使用的so庫(kù),從而減小apk的體積,同時(shí)也能防止外部人員在模擬器上安裝應(yīng)用。那么采用Cmake的編譯之后,該如何過(guò)濾掉多余的so庫(kù),來(lái)減小apk的體積呢?

一:cmake{abiFilters xxx}
使用下面的方法就可以過(guò)濾掉其他的so庫(kù)。過(guò)濾掉之后,發(fā)現(xiàn)apk是不是輕盈很多來(lái)呢
android {
defaultConfig {
externalNativeBuild {
cmake {
abiFilters "armeabi" //這里是打包的配置
cppFlags ""
}
}
}
}

二:ndk{ abiFilters xxx}
后來(lái)在讀文檔的過(guò)程中發(fā)現(xiàn),之前的寫(xiě)法一樣通用:
defaultConfig{
ndk{
abiFilters "x86","armeabi" //這里是編譯的配置
}
}
三:以上兩種的區(qū)別
我們?cè)赿efaultConfig把二者都配置上,然后分析發(fā)現(xiàn),其實(shí)最后起到?jīng)Q定作用的還是cmake中的abiFilters。


結(jié)論:也就是說(shuō),如果沒(méi)有設(shè)置打包配置的話(huà),編譯配置了幾個(gè)ABI,就會(huì)打包到apk中幾個(gè)ABI。但是如果設(shè)置了打包配置,那么最終還是由打包配置決定到底會(huì)有幾個(gè)so庫(kù)會(huì)被打包到apk中。
附錄
android studio 構(gòu)建c++原生項(xiàng)目官方文檔,該文檔中對(duì)如何添加CMakeLists.txt,以及如何基本使用,都有一個(gè)基本的介紹。這里還有一個(gè)google提供的使用進(jìn)階。
如果相對(duì)CMake有進(jìn)一步的了解,可以參看CMake的官方wiki以及CMake官方文檔。當(dāng)然也可以?xún)?yōu)先查看