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