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 轉(zhuǎn)變?yōu)?AAB,?
一直以來,,Android 首選的應用程序包就是 APK,而一個 APK 中往往包含應用代碼,、圖片,、音頻和開發(fā)者生成的應用簽名密鑰等大量資源。
不僅如此,,由于 Android 設(shè)備規(guī)格各異,,開發(fā)人員還需根據(jù)設(shè)備的不同屏幕密度(320dpi、480dpi 等),、處理器(ARM,、ARM64、x86),、用戶所在的不同地區(qū),,在 Google Play 中構(gòu)建和上傳多個 APK,以此才能在用戶點擊“安裝”時,,在其設(shè)備上安裝最適配的 APK,。
但在這種情況下,應用開發(fā)者便承受太多:不僅要開發(fā)應用,,還要管理許多 APK 以支持大量設(shè)備,。因此為了省時省力,大多數(shù)開發(fā)者通常都會選擇構(gòu)建一個通用 APK,,即包含語言包,、代碼等在內(nèi)的所有資源。不論用戶身處何處,、使用何種規(guī)格的設(shè)備,,只需下載這個通用 APK 即可。
說到這里,,你或許發(fā)現(xiàn)了問題所在:包含所有資源的通用 APK 太大了,。用戶分明只需其中與自己設(shè)備相適配的資源,卻要把整個 APK 都下載下來,,不僅延長了安裝時間,,也占用了更多的帶寬。
為了解決這個問題,,谷歌在 2018 年 Google I/O 大會上推出了 AAB 格式,,希望以此減少開發(fā)者的負擔,同時也有助于減少應用大小,、安裝時間和帶寬消耗,,提高用戶體驗。
簡單來說,,AAB 格式其實并不是一個全新的應用安裝包,,你可以將它當做一個容器,里面包含著一個基本 APK 和多個用于特定配置的 APK,。
而谷歌在這之中則充當“篩選”的角色:一旦開發(fā)者選擇使用 AAB 格式發(fā)布應用,,谷歌就會根據(jù)用戶的設(shè)備配置從中生成優(yōu)化后的 APK 提供給用戶。對用戶而言,,這樣的 APK 體積小,、安裝快,對開發(fā)者來說也省事:不必再為各種設(shè)備管理一大堆 APK,。
因此,,總體來看,谷歌要求下個月以 AAB 格式發(fā)布新應用的決定主要面向開發(fā)者,,對用戶而言影響不是太大,,因為最終在設(shè)備上安裝 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 功能可自定義將哪些功能模塊交付給哪個設(shè)備,,支持安裝時交付,、按條件交付和按需交付等三種模式。這也就是將應用的功能拆分開來,,以此大幅縮短用戶下載應用的時間,,其中沒用的功能用戶可以不下載或等到以后需要時再下載。
還有一個 Play Asset Delivery 功能,,以動態(tài)方式交付大型資源可以減少用戶等待時間,,同時縮減交付成本,。即使用 Play Asset Delivery 的游戲可通過紋理壓縮格式作為交付條件,以便用戶只獲取適合其設(shè)備的資源,,避免浪費空間或帶寬,。
對于 AAB 的擔憂
雖然從結(jié)果看來,以 AAB 格式分發(fā)新應用對開發(fā)者和用戶都有益處,,但還是有部分人對此有些擔憂,。
有人擔心從 APK 變?yōu)?AAB 格式會太復雜。但谷歌表示:“對于大多數(shù)應用而言,,構(gòu)建 AAB 文件來替代 APK 文件僅需要少量工作,。”它指出 App Bundle 是一種受主流構(gòu)建工具支持的開源格式,,因此在 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 中),,對此谷歌表示,所有“簽名密鑰都將存儲在谷歌用來存儲自己的密鑰的同一基礎(chǔ)設(shè)施上” ,,因此開發(fā)者的私人簽名密鑰都會受到嚴密的安全保護,。
還有人擔心因為 AAB 不能在 Google Play 以外的地方下載,會對如亞馬遜應用商店等第三方應用商店造成很大影響,。但據(jù)了解谷歌已經(jīng)開發(fā)了一個名為 bundletool 的開源工具,,允許開發(fā)人員從 AAB 包中創(chuàng)建 APK,因此想在第三方商店中發(fā)布 Android 應用程序的開發(fā)人員可以手動導出其應用的 APK 版本,。