ARM  · Android

Android全面拥抱64位,这事或许还得靠ARM

在Android端由ARM来实现从32位到64位的升级,效果上显然将远胜于谷歌。

 |  三易生活

文|三易生活

许多早年间自己动手安装过Windows系统的朋友,当时可能或多或少会被32位或64位的选择所困扰。而这两个版本有什么不同呢?由于计算机设备是用二进制(0与1,实际就是高电位和低电位)来表示信息,因此32位与64位则分别指的就是处理器在单位时间内,能一次处理的二进制数的位数分别为32位和64位。

174528816564timg (2).jpg

事实上不光PC端的操作系统在早年间有32位与64的区别,移动端同样也有。不过相比于背负着兼容性历史包袱的Windows,新生的移动端操作系统在32位“升级”到64位这件事上,明显要上心的多,继苹果的iOS在2017年全面拥抱64位应用后,Android阵营也有望在2022年实现64位化。

作为iOS与Android设备CPU指令集架构的开发者,ARM在本周举办的DevSummit开发者峰会上宣布,从2022年开始,旗下芯片产品之中CPU的Cortex大核将取消对32位的支持。换句话来说,就是未来凡是搭载了使用Cortex大核心的各类主控产品,基将会不再能运行得了32位应用。

20201008_131439_121.jpeg

这一消息也让谷歌一直以来想要在Android上实现全面64位化的规划,居然是依靠上游的芯片设计厂商来解决。如果一切顺利,从2014年问世第一款支持64位的SoC(高通骁龙808)和支持64位的系统(Android 5.0)算起,花了8年时间才会实现从32位到64位的升级,而这比谷歌早前预想的时间点晚了3年。

按照谷歌在2019年初的通知开发者的信息显示,“从2019年8月1日开始,您在Google Play上发布的应用将需要支持64位架构。64位CPU为您的用户提供更快,更丰富的体验。添加应用程序的64位版本可改善性能,为将来的创新打下基础,并为使用仅64位硬件的设备做好准备”。配合这一通知,谷歌方面也将最新版的Android集成开发工具Android Studio,设计成在运行APP时默认只打包为64位的so文件。

然而很可惜的是,谷歌这则强制性意味浓厚的新规与配套措施,并没有引发明显的变化。除了开发者通过修改Android Studio的配置文件使得其在打包so文件时可以使用32位来“绕路”外,甚至谷歌自己在去年10月推出的Chrome 78稳定版在Google Play中,依然默认提供了32位的版本供用户下载。

be48c42a2834349b6d1d76f5c6ea15ce36d3be08.jpg

其实大家使用APPChecker以及其他类似功能的应用,就可以清楚的看到手机中应用所适配的系统版本,以及它们是32位还是64位。其中不难发现,除了微信、淘宝、米家、B站、爱奇艺等少数个例之外,绝大多数常用的国内APP至今依然还是只有32位版本。

Screenshot_20201009_160202.jpg

开发者对于64位无动于衷,是因为其本身的优势不够大吗?其实答案是否定的。因为相比于32位,应用升级到64位的核心优势,在于CPU的性能将能够得到最大限度的发挥,而在32位模式中,CPU中真正工作的寄存器空间只有四分之一。此外由于64位系统的内存寻址能力提升,任何一个应用都可以分配到超过4G的RAM,这无疑对于游戏等大型应用的性能表现有着更进一步的提升。这也意味着64位系统+64位程序+足够的大内存,就能在一定程度上让手机的性能得到提升。

19243257074510.jpg

因此对于开发者来说,对谷歌这个带有强制性的通知不感冒的关键,其实是运营成本。由于32位应用同样可以运行在64位系统上,代价则仅仅是硬件性能得不到充分发挥,但如果要将应用全面转型为64位,结果就是那些依然在使用32位系统的用户无法使用应用,所代表的是用户流失。更何况如果要发布64位应用,就需要顺带推出32位的版本,实际上是两次的代码的开发和测试,并且对于维护负担也会有一定程度的增加。

除此之外,开发者为了保护自己的代码,往往也会对64位应用敬而远之。使用Java虚拟机作为应用层运行环境的Android,因为运行的应用程序字节码完全一致,所以本质上虽然没有32位与64位的区别,但问题是目前在Android应用的开发中,许多开发者并不是使用纯粹的Java层开发,更多的会用上Android NDK来让Java与C++结合,把一些重要的方和行为,与一些私密性的东西放在反编译难度更高的C++中,来提升安全性。

所以最终的结果就是,除了类似淘宝、微信、B站这种堆积了太多功能的大型应用,需要用64位来更好的发挥CPU性能,以便提升应用的流畅度之外,绝大多数开发者甚至是游戏开发者,都很难会做出拥抱64位这种吃力不讨好的选择。

而苹果能够轻易实现从32位到64位的原因则在于,在其iOS生态中几乎扮演了“上帝”的角色,开发者使用的开发工具都是来自于苹果,也有着对于开发者更强的管控能力。可在Android生态之中,Google Play并不是唯一的分发渠道,因此也导致了谷歌对于开发者的规制能力并没有那么强。

19251394660402.jpg

这也就导致了这件事虽然谷歌一时间很难做到,但ARM却可以。虽然ARM方面目前表示,未来只有Cortex大核心会取消对32位应用的支持,小核心还继续保持,但是考虑到目前主流的移动端芯片都采用的是big.LITTLE大小核切换技术,而这是一项可以将应用程序任务调度到正确CPU核心的技术,可以大幅节省CPU功耗,同时在线程负载方面提升性能。

这一技术所带来的结果,就是芯片的工作模式必须要统一,不能是大核心使用Arm v8架构中引入的AArch64状态,小核心使用传统AArch32的状态。简而言之就是,ARM旗下的Cortex系列产品中,类似Cortex A77这样骁龙865采用的大核心如果不兼容AArch32,同一SoC内的CPU小核心同样将无法切换到AArch32模式。所以用大核心运行64位程序,用小核心运行32位程序的情况也是很难发生的。

并且由于ARM在整个移动端的产业链中,其实是处于非常上游的地位,其客户包括谷歌、苹果、高通、联发科、三星,以及华为等芯片制造商,而开发者由于往往与ARM之间还隔着谷歌、芯片厂商,以及手机厂商,因此也很难对ARM的决定产生影响。所以在Android端由ARM来实现从32位到64位的升级,效果上显然将远胜于谷歌。

因此ARM方面选择从硬件方面出发的这一决策,几乎可以说是迫使开发者必须在两年后将应用转向64位。