來源:三易生活
如果你最近有關注我們三易生活的相關內容可能會記得,近來我們接連對一些罕見機型或稀有移動平臺進行了 " 考古 "。
其實這類文章的準備工作基本都挺繁瑣,不過比起尋找那些罕見的老手機、老平板,真正讓我們感到頭大的,往往是到手后的整備過程。
畢竟,這些老機型的硬件也好、系統也罷,普遍都過于 " 古老 ",因此也就導致其所內置的應用商店往往都已不能使用。于是,我們通常需要先用一臺其他設備訪問一些靠譜的、存有大量古早 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 生態中絕大多數參與者所希望看到的事情。