來(lái)了!Android應(yīng)用市場(chǎng)64位應(yīng)用策略
作者:熊熊君fly 鏈接:https://juejin.cn/post/7023286220662767624
1 、背景
2019年8月1號(hào),在Google Play上發(fā)布應(yīng)用必須支持64位架構(gòu),緊接著 小米應(yīng)用商店、OPPO應(yīng)用商店、vivo應(yīng)用商店、騰訊應(yīng)用寶和百度手機(jī)助手等五大應(yīng)用商店宣布,為更好提升App性能體驗(yàn)并降低功耗,五方將共同推進(jìn)國(guó)內(nèi)安卓生態(tài)對(duì)64位架構(gòu)的升級(jí)支持。

具體的時(shí)間表:
- 2021年12月底,現(xiàn)有和新發(fā)布的應(yīng)用、游戲,需要上傳包含64位包體的APK包。也就是說(shuō)所有上傳的應(yīng)用都應(yīng)該包含64位代碼的版本,不再接受僅有32位版本的應(yīng)用上傳。
- 2022年8月底,對(duì)于支持64位的硬件系統(tǒng),將只接收64位版本的APK包。也就是如果到時(shí)用戶手中的硬件設(shè)備支持64位系統(tǒng)的話,那么將只運(yùn)行64位版本的應(yīng)用。
- 2023年底,硬件將僅支持64位APK,32位應(yīng)用無(wú)法在終端上運(yùn)行。
大勢(shì)所趨,以后發(fā)布的應(yīng)用要支持64位系統(tǒng),
2、調(diào)研
現(xiàn)狀
目前手機(jī)cpu架構(gòu)是armeabi、armeabi-v7a、arm64-v8a、x86、x86_64,但是目前手機(jī)基本上都是arm架構(gòu),x86架構(gòu)的手機(jī)基本上沒(méi)有,基本上是平板,可以忽略。
armeabi是十年前的手機(jī)CPU架構(gòu),基本上沒(méi)有了。
armeabi-v7a的CPU架構(gòu)是32位。
Arm64-v8a的CPU架構(gòu)是64位。
所以目前需要考慮的armeabi-v7a、arm64-v8a這兩款就可以了,
之前開發(fā)者在打包的時(shí)候,為了包大小的考慮,常常指定打包的時(shí)候,只指定armeabi-v7a架構(gòu)的so包,這樣包大小可以小很多,尤其是so庫(kù)多的應(yīng)用
ndk?{
????//?選擇要添加的對(duì)應(yīng) cpu 類型的 .so 庫(kù),多個(gè)abi以“,”分隔。
????abiFilters?'armeabi-v7a'
????//?可指定的值為?'armeabi-v7a',?'arm64-v8a',?'armeabi',?'x86',?'x86_64',
}
在項(xiàng)目的gradle中配置ndk就可以,64位的手機(jī)會(huì)自適應(yīng)32位的應(yīng)用,這樣可以完美的兼容市面上99.9%的手機(jī),這樣包大小也會(huì)小很多 但是這樣64位處理器的性能就無(wú)法完美的發(fā)揮出來(lái),那么應(yīng)用64位有哪些好處呢?
由于一些軟件功能越來(lái)越多,安裝包的體積、運(yùn)行時(shí)需要消耗的運(yùn)行內(nèi)存越來(lái)越大,32位應(yīng)用的局限性越來(lái)越突出。而64位系統(tǒng),可以在單個(gè)線程里使用超過(guò)4GB的運(yùn)行內(nèi)存,當(dāng)處理一些大型軟件、或者進(jìn)行高像素圖像、視頻處理的時(shí)候,就更能夠發(fā)揮手機(jī)硬件的優(yōu)勢(shì)。比如一些大型游戲、網(wǎng)絡(luò)視頻直播、高畫質(zhì)影音播放等等。而且64位系統(tǒng)相比32位系統(tǒng),會(huì)帶來(lái)至少20%以上效率的提升。
打入64位的so包必然導(dǎo)致包大小增大很多,導(dǎo)致用戶下載體驗(yàn)差,目前Google paly支持上傳32位和64位的兩個(gè)apk,這樣用戶可以根據(jù)手機(jī)cpu架構(gòu)動(dòng)態(tài)的下載那個(gè)apk
國(guó)內(nèi)市場(chǎng)暫不支持,但是這個(gè)是趨勢(shì),之后必然要上這個(gè)功能的,我們?cè)陂_發(fā)的時(shí)候,暫時(shí)還需要支持'armeabi-v7a', 'arm64-v8a’兩個(gè)架構(gòu),包大小也會(huì)增大很多
3、 處理方案
小米應(yīng)用商店支持64位架構(gòu)適配指南: https://dev.mi.com/distribute/doc/details?pId=1244
vivo應(yīng)用商店64位架構(gòu)適配指南: https://dev.vivo.com.cn/documentCenter/doc/511
oppo應(yīng)用商店64位架構(gòu)適配指南: https://open.oppomobile.com/wiki/doc#id=10948
若要確定應(yīng)用是否包含 64 位庫(kù),最簡(jiǎn)單的方法就是檢查 APK 文件的結(jié)構(gòu)。在構(gòu)建時(shí),APK 會(huì)與應(yīng)用所需的所有原生庫(kù)打包在一起。原生庫(kù)會(huì)根據(jù) ABI 存儲(chǔ)在不同的文件夾中。您的應(yīng)用不一定要支持所有 64 位架構(gòu),但對(duì)于支持的每種原生 32 位架構(gòu),應(yīng)用都必須包含相應(yīng)的 64 位架構(gòu)。對(duì)于 ARM 架構(gòu),32 位庫(kù)位于?armeabi-v7a?中。對(duì)應(yīng)的 64 位庫(kù)則位于?arm64-v8a?中。
對(duì)于 x86 架構(gòu),32位庫(kù)位于?x86中,64 位庫(kù)則位于 x86_64 中。
那么如何查看apk的架構(gòu)
點(diǎn)擊打出來(lái)的apk包,就會(huì)出現(xiàn)在目前的apk架構(gòu)
在build.gradle中把ndk的依賴修改,依賴'armeabi-v7a', 'arm64-v8a'
ndk?{
????????????//?選擇要添加的對(duì)應(yīng) cpu 類型的 .so 庫(kù),多個(gè)abi以“,”分隔。
????????????abiFilters?'armeabi-v7a',?'arm64-v8a'
????????????//?可指定的值為?'armeabi-v7a',?'arm64-v8a',?'armeabi',?'x86',?'x86_64',
????????}
打出的包的結(jié)果

打出的包需要在64位測(cè)試機(jī)上測(cè)試,如何查看自己的的android手機(jī)的CPU架構(gòu)呢?
查看Android設(shè)備的CPU架構(gòu)信息,可以使用命令來(lái)完成:
1、
adb shell2、
cat /proc/cpuinfo

CPU architecture:7表示arm-v7,8表示arm-v8
AArch64是ARMv8 架構(gòu)的一種執(zhí)行狀態(tài)。

? 耗時(shí)2年,Android進(jìn)階三部曲第三部《Android進(jìn)階指北》出版!
? 『BATcoder』做了多年安卓還沒(méi)編譯過(guò)源碼?一個(gè)視頻帶你玩轉(zhuǎn)!
? 重生!進(jìn)階三部曲第一部《Android進(jìn)階之光》第2版 出版!
為了防止失聯(lián),歡迎關(guān)注我的小號(hào)
??微信改了推送機(jī)制,真愛請(qǐng)星標(biāo)本公號(hào)??