事情的起因还得从两款新机开始说起。前阵子在试用 realme GT2 Pro 和小米 12 Pro 这两款搭载骁龙8 Gen 1 处理器的新机的时候,注意到它们都开始 “ 排斥 ” 起了 32 位的应用。首先是 realme GT2 Pro,每次我从第三方渠道安装应用,只要系统检测到它是 32 位,就会在界面弹出 “ 此安装包为 32 位,不建议安装 ” 的风险提示:
想要继续安装这些应用当然可以,但是它们在运行过程中如果出现卡顿或者闪退等问题就别怪手机有 Bug 了,是你安装的应用是 32 位的缘故~然后是小米 12 Pro,打开手机自带应用商店,你会发现小米在商店首页专门设置了一个醒目的 “ 64 位应用专区 ”,方便我们直接在里边下载 64 位应用:
一旦遇到你要下载的应用是 32 位,它就会在顶部弹出 “ 该应用未适配本机 64 位处理器 ” 的提示:
同时在应用升级界面,我们还能通过蓝色标签清楚区分这些正在升级的应用是 32 位还是 64 位版本:
然而如果换做是骁龙8 Gen 1 之前的机型,比如搭载骁龙 888 的小米 11,就根本没有对应用的版本做出如此严格的区分,更别提在下载或者安装应用的时候会跳出风险提示了:
之所以这两家手机厂商在新机上要这么做,其实也是迫于无奈。这是因为在骁龙8 Gen 1 处理器所拥有的 8 个 CPU 核心中,只有 3 个 2.5GHz 的 A710 大核兼容 32 位应用,其余 1 个 3.0GHz 的 X2 超大核和 4 个 1.8GHz 的 A510 中核则均不兼容 32 位应用。
这就导致那些搭载骁龙8 Gen 1 的手机在运行 32 位应用时,只能用到 8 核中的其中 3 个大核,其它 5 核则是处于围观吃瓜状态,根本不参与运算工作。
根据小米和 realme 的说法,如果这个 32 位应用是一个多线程程序,它的性能就会受到可使用核心数的限制,同时也会导致功耗的增加,严重一点甚至还会造成应用的闪退、闪屏、音频异常或者卡顿。很不幸,小编简单看了下,发现在我之前下载到手机里的两百多个应用里,有 17.4% 的应用还是 32 位版本,其中不乏中国银行、美团、浙里办、滴滴出行、李跳跳等一些我平时经常会用到的应用:
这意味着要是我现在就把手机换成搭载骁龙8 Gen 1 的新机,就要注意这些应用在新机上的兼容问题。朋友们看到这里先别急着骂高通吃饱了撑的没事找事,把 32 位强制限制在大核上运行的决定不是高通做的,而是比它更上游的处理器设计公司 ARM。是 ARM 在它去年推出的 Armv9 新架构里,取消了超大核和中核对于 32 位应用的兼容,而骁龙8 Gen 1 CPU 部分使用的架构恰恰就是 Armv9。
除了骁龙8 Gen 1,天玑 9000 和 Exynos 2200 处理器的 CPU 采用的也是 Armv9 架构,32 位应用到了这两款处理器上同样只能用大核运行。
更坏的消息是什么呢?到 2023 年,不管是大核、中核还是小核,ARM 所有的内核都将只支持 64 位,到那时 32 位应用会变得直接不能用。也正是基于这个原因,厂商们不着急才怪,托尼注意到现在包括华为、vivo 在内的很多厂商都已经开始催开发者赶紧把自家的 32 位应用升级成 64 位:
如果最近有朋友正在考虑换机,那就可以先在旧手机上下载一个名为 “ LibChecker ” 的软件来看下自己平时常用的软件是 32 位版本还是 64 版本。
要是 32 位版本的软件占比比较多,那就得衡量下是否值得在这个过渡时期换机。不过话说回来,ARM 做出的这个决定虽然短期内确实会对 32 位应用在新手机上的使用造成影响,但是从长期来看,这绝对是一件好事。要知道高通在 2013 年发布的骁龙 410,就已经是一款 64 位的处理器;并且谷歌在 2014 年发布的 Android 5.0,也已经是一款 64 位的安卓系统。
这代表安卓手机从很早开始,无论是在硬件层面还是系统层面都已经是 64 位,运行起 64 位应用完全没问题。和电脑上的情况一样,一款应用要在手机上运行,首先需要把数据从硬盘加载到内存方便 CPU 访问。
而 32 位和 64 位应用中的 “ 位 ”,指的就是它在这个过程中可供 CPU 寻址的内存空间的大小。相较于 32 位应用最大只能调用 4G 内存( 2^32 Bytes=4G ),64 位应用最大的优势就是能调用更大的内存,从而使应用的加载、响应速度变更快。所以我们可以看到那些比较吃性能的应用比如各种大型手游,早就已经是 64 位版本:
就算有些应用不需要用到那么高的性能,为了更好的用户体验和后续功能的开发,某些大公司也会未雨绸缪把自家应用尽早的升级到 64 位。小米产品经理说把应用更新到 64 位续航明显提升。
也正因为 64 位是大势所趋,所以早在 2013 年,苹果就先安卓一步在 iPhone 5s 上使用上了 64 位的 A7 处理器,那时候高通第一款 64 位处理器骁龙 410 要到年底才发布。而且它在 2015 年就宣布所有的 iOS 应用都必须支持 64 位,否则就不允许上架到 App Store:到了 2017 年,苹果发布的 iOS 11 就彻底取消了对 32 位应用的支持,它这么做的目的就是要逼开发者只开发 64 位应用。
这时苹果封闭生态圈的优势就体现出来了。要么就听我的话乖乖开发 64 位应用,要么就从 iOS 上滚蛋,在苹果的强势执行下,现在我们在 iPhone 上用到的所有应用,其实全部已经是 64 位版本。而安卓阵营之所以还有这么多 32 位应用的存在,要怪就怪谷歌还有各大安卓应用市场太迁就,就是不愿意像苹果那样狠下心来全面禁止 32 位应用。
谷歌曾经在 2019 年 8 月就要求上架到 Play Store 的应用,除了提供 32 位版本外,还必须提供 64 位版本,然而它却留了 “ 漏洞 ”,让开发者可以把 32 位应用轻松变成同时兼容 32 位与 64 位的版本:
到了 2021 年 8 月,谷歌虽然不再允许 64 位设备下载 32 位应用,但它还是没有在自家 Android 系统里下定决心把 32 位应用给直接禁掉,尽管全球只剩 2% 左右的移动设备是 32 位的。
其它应用商店就更不用说,一直都是跟着谷歌屁股跑,小米应用商店、OPPO 软件商店、vivo 应用商店等几大商店直到去年才开始大力推 64 位应用:
连谷歌和各大应用商店都这么不积极,那些制作小应用的个人开发者就更不用说,根本没动力把 32 位应用升级到 64 位给自己额外增加工作量好吧。毕竟 32 位应用又不是不能用,更何况我开发这些小应用很多时候还是靠爱发电的呢。
俗话说得好有时为了大局着想往往需要有人站出来当大恶人,在这次安卓全面拥抱 64 位生态的进程中,扮演恶人角色的或许就是 ARM 吧。事实上,自 ARM 发布首款支持 64 位的 Armv8 架构以来,已有近十年的时间,期间高通、华为、联发科基于 Armv8 推出的移动端处理器数不胜数。华为甚至买下了 Armv8 架构的永久授权。
估计 ARM 自己也很郁闷,都过去这么久了,安卓竟然还没彻底淘汰 32 位应用。好在就目前厂商们的动作来看,ARM 在新架构中把 32 位应用限制在大核运行的效果可以说是非常明显,接下来就看那些开发者们的努力了。