Android 用戶想必對 APK 并不陌生。APK 是 Android Package 的縮寫,即Android 安裝包,基于 ZIP 壓縮包格式,通過把 Android SDK 編譯工程打包成一個 Android 系統支持的安裝程序文件,幾乎所有 Android 應用程序都以這種格式發布。
但自下個月起,APK 格式要被谷歌棄用了。
近日,谷歌宣布:自 2021 年 8 月起,Google Play 將要求開發者以 Android App Bundle (以下簡稱 AAB)格式發布新應用,該格式將取代 APK 作為標準發布格式。
為何要從 APK 轉變為 AAB?
一直以來,Android 首選的應用程序包就是 APK,而一個 APK 中往往包含應用代碼、圖片、音頻和開發者生成的應用簽名密鑰等大量資源。
不僅如此,由于 Android 設備規格各異,開發人員還需根據設備的不同屏幕密度(320dpi、480dpi 等)、處理器(ARM、ARM64、x86)、用戶所在的不同地區,在 Google Play 中構建和上傳多個 APK,以此才能在用戶點擊“安裝”時,在其設備上安裝最適配的 APK。
但在這種情況下,應用開發者便承受太多:不僅要開發應用,還要管理許多 APK 以支持大量設備。因此為了省時省力,大多數開發者通常都會選擇構建一個通用 APK,即包含語言包、代碼等在內的所有資源。不論用戶身處何處、使用何種規格的設備,只需下載這個通用 APK 即可。
說到這里,你或許發現了問題所在:包含所有資源的通用 APK 太大了。用戶分明只需其中與自己設備相適配的資源,卻要把整個 APK 都下載下來,不僅延長了安裝時間,也占用了更多的帶寬。
為了解決這個問題,谷歌在 2018 年 Google I/O 大會上推出了 AAB 格式,希望以此減少開發者的負擔,同時也有助于減少應用大小、安裝時間和帶寬消耗,提高用戶體驗。
簡單來說,AAB 格式其實并不是一個全新的應用安裝包,你可以將它當做一個容器,里面包含著一個基本 APK 和多個用于特定配置的 APK。
而谷歌在這之中則充當“篩選”的角色:一旦開發者選擇使用 AAB 格式發布應用,谷歌就會根據用戶的設備配置從中生成優化后的 APK 提供給用戶。對用戶而言,這樣的 APK 體積小、安裝快,對開發者來說也省事:不必再為各種設備管理一大堆 APK。
因此,總體來看,谷歌要求下個月以 AAB 格式發布新應用的決定主要面向開發者,對用戶而言影響不是太大,因為最終在設備上安裝 Android 應用的打包格式還是 APK。
AAB 的優勢
相較于 APK,AAB 自然有其獨一無二的優點。
首先便是上文所提到的應用體積縮小。據谷歌官方介紹,使用 AAB 生成優化的 APK 體積平均會比一般的 APK 小 15%,而這一數據會根據應用大小有較大起伏。例如 Airbnb 在從 APK 切換到 AAB 格式后應用大小減少了 22%,而 Netflix 更是減少了 57%。
其次,AAB 的 Play Feature Delivery 功能可自定義將哪些功能模塊交付給哪個設備,支持安裝時交付、按條件交付和按需交付等三種模式。這也就是將應用的功能拆分開來,以此大幅縮短用戶下載應用的時間,其中沒用的功能用戶可以不下載或等到以后需要時再下載。
還有一個 Play Asset Delivery 功能,以動態方式交付大型資源可以減少用戶等待時間,同時縮減交付成本。即使用 Play Asset Delivery 的游戲可通過紋理壓縮格式作為交付條件,以便用戶只獲取適合其設備的資源,避免浪費空間或帶寬。
對于 AAB 的擔憂
雖然從結果看來,以 AAB 格式分發新應用對開發者和用戶都有益處,但還是有部分人對此有些擔憂。
有人擔心從 APK 變為 AAB 格式會太復雜。但谷歌表示:“對于大多數應用而言,構建 AAB 文件來替代 APK 文件僅需要少量工作。”它指出 App Bundle 是一種受主流構建工具支持的開源格式,因此在 Play Core 原生 SDK、Play Core Java SDK 和 Play Core Kotlin SDK 的助力下,無論用戶偏好哪種編碼環境,都可以輕松開始使用可選的高級 App Bundle 功能。此外,AAB 的要求僅適用于新應用,現有應用及面向特定 Google Play 用戶的私人應用目前無需遵從此要求。
有人對與谷歌共享私人簽名密鑰表示擔憂(簽名密鑰是驗證 APK 完整性的重要信息,谷歌從 ABB 中生成優化的 APK,因此簽名密鑰也將包含在 ABB 中),對此谷歌表示,所有“簽名密鑰都將存儲在谷歌用來存儲自己的密鑰的同一基礎設施上” ,因此開發者的私人簽名密鑰都會受到嚴密的安全保護。
還有人擔心因為 AAB 不能在 Google Play 以外的地方下載,會對如亞馬遜應用商店等第三方應用商店造成很大影響。但據了解谷歌已經開發了一個名為 bundletool 的開源工具,允許開發人員從 AAB 包中創建 APK,因此想在第三方商店中發布 Android 應用程序的開發人員可以手動導出其應用的 APK 版本。