“删除”应用版本号是 Android 的无奈,也是进步
来源:三易生活
如果你最近有关注我们三易生活的相关内容可能会记得,近来我们接连对一些罕见机型或稀有移动平台进行了 " 考古 "。
其实这类文章的准备工作基本都挺繁琐,不过比起寻找那些罕见的老 手机 、老平板,真正让我们感到头大的,往往是到手后的整备过程。
毕竟,这些老机型的硬件也好、系统也罢,普遍都过于 " 古老 ",因此也就导致其所内置的应用商店往往都已不能使用。于是,我们通常需要先用一台其他设备访问一些靠谱的、存有大量古早 APK 文件的资源站,找到老机型能用的软件、并将其下载,然后再将 APK 文件传输到这些机型上尝试安装和运行。
很显然,在这个过程中,如何判断应用 " 能否兼容 " 其实是最困难的一个环节。事实上,很多时候我们都不得不提前准备多个版本,然后再一个一个地去 " 试错 "。正因如此,当日前我们注意到谷歌开始在官方应用商店里不再显示应用的版本号信息时,内心里其实是毫无波澜,甚至有一种 " 这天终于来了 " 的感觉。
为什么?因为应用 " 版本号 " 对于用户来说本无太大作用
在解释谷歌此举的用意前,我们首先想要让大家来解答一个 " 简单 " 的问题。下面这四个不同版本的 Google Play Service 应用,哪一个才能用于华硕 Zenfone Zoom 这款机型上?
A. Google Play Service 22.09.20.040300-434869283
B. Google Play Service 22.12.25.190400-439420056
C. Google Play Service 22.18.20.040700-451484765
D. Google Play Service 22.24.13.100400-455379025
怎么样,是不是感觉光看这几串数字眼睛就已经花了?但如果有着丰富的 " 玩机经验 ",你可能会知道,Zenfone Zoom 是一款基于 Intel Atom 平台的 x86 架构机型,同时其最后一个官方系统版本是 Android 6.0。而在上述这四个应用的版本号里,"040700" 字段中的前三位数字 "040",所指的是兼容 Android 6.0 系统,而后三位数字 "700" 则正是为 x86 处理器适配。因此,正确答案应该选 C。
但问题在于,一方面能看懂这种 " 软件版本号 " 隐藏信息的人,本就少之又少。
很多软件的完整版本号,对于大多数用户来说其实都如同天书
另一方面,对于绝大多数朋友而言,在通过手机内置应用商店更新软件(而不是像我们这样,辛辛苦苦去资源站找 APK 下载)时,应用商店本就会自动识别硬件信息、系统版本,并自动推送最兼容的应用版本,所以大部分人本来就完全没有必要去了解和记住 Android 应用版本号里的各种门道。
在最新的 Android 生态下,软件版本已经失去了意义
当然,Android 软件的 " 版本号 " 如今不只是对用户而言已无意义,哪怕是对于开发者和谷歌来说,也确实到了该与它说再见的时刻。
为什么这么讲?首先大家都知道,Android 生态最大的短板就在于设备的 " 碎片化 "。即便不算那些彻底过时的老机型,目前也有着不下十种不同的主流 SoC 方案,至少三四个不同的常见系统版本,还有不知道多少种各自不同的屏幕分辨率和长宽比。
这款常用应用,就为不同 Android 机型硬件匹配了多个版本
如何才能确保对以上所有这些设备的完美兼容呢?以前行业中常见的办法有两种。一种就如同上图所举的这个例子一样,针对每一个不同的硬件平台、系统版本,甚至是每一个不同的屏幕分辨率都单独编写一个版本。另一种办法则是将所有不同平台、不同系统版本,乃至不同分辨率的素材和代码全部打包成一个安装包,由程序在安装、运行时自动适配。
很显然,第一种办法能让应用安装包更小、下载和安装速度更快,但缺点是开发者自己很累。而第二种办法则相反,开发者可以省事,但消费者(用户)就得多耗费无用的流量和存储空间,来容纳那些他(这台设备)所不需要的代码。
所以其实自 2021 年 8 月开始,谷歌就已经在自己的应用商店里力推新的 Android App Bundles(.AAB)安装格式,用以取代此前的 APK 程序包。在这个新的安装格式下,开发者们向应用商店上传应用时,不再需要针对每一个不同平台都上传一个完整的 APK 安装包,更不用把所有代码都打成一个 " 大包 ",取而代之的是可以直接上传针对不同硬件、不同系统版本,乃至不同分辨率的界面代码 " 模块 "。
AAB 格式应用的语言、界面、底层架构代码等,都是模块化的
等到消费者从 Google Play Store 下载应用时,应用商店就会自动根据用户的机型、系统情况,挑选出最佳的 " 代码模块 " 进行即时整合。如此一来,既能确保每台设备下载到的都是最兼容自身的应用代码(版本),又能节约流量和存储空间。
只不过这同时也意味着,一方面开发者实际上不再需要维护 " 整个软件 ",每次更新软件功能时只要上传特定的、被更新过的功能模块就行。另一方面,不同消费者使用不同的设备,在应用商店里下载到的软件本身,就会存在着各种细微上的差异。既然每个人下到的软件可能都不一样,再纠结 " 版本号 " 自然就已毫无意义。而且更准确地说,在这种情况下,软件本身其实也压根就不再需要有 " 版本 " 的概念了。
" 消灭版本号 " 不见得是一种进步,但确实更适合市场
请注意,前文中我们所提及、所有关于目前移动应用 " 版本号 " 消失的事实和背后的技术理由,其实都有一个共同的大前提,那就是在当前由谷歌所引领的 Android 生态下。
谷歌输入法此前的 APP 信息界面
谷歌输入法现在的 APP 信息界面,可以看到冗长的版本号已不显示了
为什么要强调这一点?因为除了 Android 手机外,目前还没有任何一个其他的软硬件生态产生过如此强烈的,需要 " 消灭 " 软件版本号的需求。 苹果 的 iOS、iPadOS 和 macOS 生态,几乎未曾遭遇过严重的 " 碎片化 ";甚至就连 PC 上的 Windows 系统,也很少有听说因为系统或硬件迭代,老款软件突然就变得不能用、非得要专门进行适配更新的例子。
那么,为什么 Android 生态就格外 " 特殊 ",非得要依靠 Android App Bundles、靠 " 消灭 " 软件版本号的做法,才能确保性能与兼容性呢?
其实说白了,一方面这是源自 Android 的开源血统。谷歌毕竟不像苹果那样,是依靠自研硬件来撑起系统生态,既然 Android 开放给了无数硬件厂商,自然就会面临比 iOS、比 iPadOS 复杂得多的硬件适配问题。
另一方面,与 " 老成持重 "、每次大版本更新都必需以稳定兼容为优先的 PC 操作系统相比,Android 所面临的、快节奏的手机市场,又决定了它每一代系统之间必须要有足够大的差异,必须要让消费者 " 一看、一用 " 就能感受到变化和进步。因此每次大版本 Android 系统的更新,往往都会带来底层设计上的较大改动,这就意味着大量应用都必须要重新进行针对性优化,才能发挥出最好的能效甚至是兼容性。
当然,最为重要的是,通过新的软件封包和部署技术、通过 " 淡化 " 版本号的概念,谷歌实际上变相封堵了那些第三方 APK 资源站。如此一来,用户自然就只能更加倚重手机自带的应用商店,而这显然是整个 Android 生态中绝大多数参与者所希望看到的事情。