1. 程式人生 > >讓APK只包含指定平臺的so庫(abi)

讓APK只包含指定平臺的so庫(abi)

相信大家都用過很多第三方的sdk,比如百度地圖,支付寶,極光推送等等。如果這個sdk對Android的平臺支援全,可能會包含armeabi, armeabi-v7a,x86, arm64-v8a,x86_64五種abi,但是你其他的so庫可能只支援其中的幾個平臺,這樣,你編譯執行,可能就會Crash。

我試著把QQ和微信的APK解壓,發現他們只有armeabi的支援,其他的平臺根本不需要,我也就查閱資料,看如何把其他的去掉,開始只想著去刪除,後面查詢資料發現了更加便捷的方式。

第一種:對每個要生成的渠道包進行分別配置(在app下的build.gradle檔案中配置)

productFlavors {
        samsungapps{
            ndk {
                abiFilters "armeabi"
            }
        }
        hiapk{
            ndk {
                abiFilters "armeabi-v7a"
                abiFilters "x86"
                abiFilters "armeabi"
                abiFilters "arm64-v8a"
                abiFilters "x86_64"
            }
        }
        anzhi{
            ndk {
                abiFilters "armeabi-v7a"
                abiFilters "armeabi"
                abiFilters "arm64-v8a"
            }
        }
}
像這種就是單獨對渠道包配置,對應打出來的包就只包含你所需要的so庫。

第二種:全域性配置(這種需求比較多,同樣是在app下的build.gradle下配置)

defaultConfig {
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
        }
    }
這樣生成的所有Apk就最多有armeabi, armeabi-v7a, arm64-v8a這三種平臺的so庫,當然要它本身就有這三個平臺的so庫

更多分享請搭載老爺車進入開車啦