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