文章目錄
- Android目前支援以下7種ABIs
- 大廠如何适配的
- 各種cpu架構市場占有率
- 适配方案
Android目前支援以下7種ABIs
mips, mips64, X86, X86–64, arm64-v8a, armeabi, armeabi-v7a
abifilters 為我們提供了選擇适配指定CPU架構的能力,隻需要在app下的 build.gradle添加如下配置:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a', 'x86_64'
}
}
}
大廠如何适配的
預設情況下,為了使APP有更好的相容性,我們使用 Android Studio 或者指令打包時,會預設支援所有的架構,但相應的APK size 會瘋狂的增大,那麼大廠是如何适配的?
微信适配的是
arm64-v8a
(微信應該是最近才适配到
arm64-v8a
,以前是
armeabi
),支付寶和手Q适配的是
armwabi
,淘寶适配的是
armwabi-v7a
。各個APP适配的平台不太一樣,但是他們有一個共同點,那就是它們隻指定了一個平台
各種cpu架構市場占有率
Android 7種CPU架構在目前市場的占有率:
-
: 目前主流版本arm64-v8a
-
: 一些老舊的手機armeabi-v7a
-
/x86
:x86_64
架構的手機都會包含由 Intel 提供的稱為 Houdini 的指令集動态轉碼工具,實作對 arm .so 的相容,再考慮x86
1% 以下的市場占有率,x86 相關的兩個 .so 也是可以忽略的x86
-
/armeabi
/mips
: NDK 以前支援 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS,但 NDK r17 已不再支援,極少用于手機可以忽。mips64
目前手機市場上,
x86 / x86_64/armeabi/mips / mips6
的架構,基本可以不不考慮了,它們的占有量應很少很少了,
arm64-v8a
作為最新一代架構,應該是目前的主流,
armeabi-v7a
隻存在少部分老舊手機
适配方案
我們項目中該如何适配呢?
- 隻适配
的APP可以跑在armeabi
,armeabi
,x86
,x86_64
,armwabi-v7a
上arm64-v8
- 隻适配
可以運作在armwabi-v7a
和armwabi-v7a
arm64-v8a
- 隻适配
可以運作在arm64-v8a
上arm64-v8a
是以給出如下幾個方案:
方案一:隻适配armeabi
優點:基本上适配了全部CPU架構(除了淘汰的mips和mips_64)
缺點:性能低,相當于在絕大多數手機上都是需要輔助ABI或動态轉碼來相容
方案二:隻适配 armwabi-v7a
同理方案一,隻是又篩掉了一部分老舊裝置,在性能和相容二者中比較平衡
方案三: 隻适配 arm64-v8
優點: 性能最佳
缺點: 隻能運作在arm64-v8上,要放棄部分老舊裝置使用者
這三種方案都是可以的,現在的大廠APP适配中,這三種都有,大部分是前2種方案。具體選哪一種就看自己的考量了,以性能換相容就
arm64-v8
,以相容換性能
armeabi
,二者稍微平衡一點的就
armwabi-v7a
。
目前來說,大多數的大廠APP用的都是
armeabi
或
armwabi-v7a
,隻有像微信這種牛逼的APP,為了追求性能和使用者體驗,放棄了少部分裝置
參考文章:為何大廠APP如微信、支付寶、淘寶、手Q等隻适配了armeabi-v7a/armeabi?