讓APK只包含指定平臺的so庫(abi)
阿新 • • 發佈:2019-01-30
相信大家都用過很多第三方的sdk,比如百度地圖,支付寶,極光推送等等。如果這個sdk對Android的平臺支援全,可能會包含armeabi, armeabi-v7a,x86, arm64-v8a,x86_64五種abi,但是你其他的so庫可能只支援其中的幾個平臺,這樣,你編譯執行,可能就會Crash。
我試著把QQ和微信的APK解壓,發現他們只有armeabi的支援,其他的平臺根本不需要,我也就查閱資料,看如何把其他的去掉,開始只想著去刪除,後面查詢資料發現了更加便捷的方式。
第一種:對每個要生成的渠道包進行分別配置(在app下的build.gradle檔案中配置)
像這種就是單獨對渠道包配置,對應打出來的包就只包含你所需要的so庫。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" } } }
第二種:全域性配置(這種需求比較多,同樣是在app下的build.gradle下配置)
defaultConfig {
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
}
}
這樣生成的所有Apk就最多有armeabi, armeabi-v7a, arm64-v8a這三種平臺的so庫,當然要它本身就有這三個平臺的so庫更多分享請搭載老爺車進入開車啦