如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle

Android_開發者發表於2018-10-15

對於手機使用者來說,“儲存空間不足” 警告有時會顯得非常煩人。時至今日,手機儲存容量仍然是有限的。雖然儲存容量多年來一直在增長,但是填充在我們手機裡的東西:音樂、應用、遊戲、照片等也同樣在增長。

如何針對不同的使用者給出最優的安裝體驗,正是 Android App Bundle 所要解決的問題。本文將闡述 App Bundle 可以帶來的好處,並演示如何使用這種全新的分發功能。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
傳統的 Android Package Kit (APK) 包含應用支援的所有裝置的程式碼和資源 (佈局檔案、影象等)。因此,您在安裝 APK 時可能裝上了一些您永遠不會用到的資源。您的螢幕尺寸不會改變,您的 CPU 也不會; 您通常不會說應用所支援的所有語言。很明顯,APK 裡的內容的比您要求的更多,佔用的空間也比實際需要的更多。

如果因為上述原因帶來的臃腫的 APK 讓您頗為困擾,現在解決方案就在眼前 —— 今年在谷歌 I/O 上釋出的 Android App Bundle,可以幫助開發者用更小尺寸的 APK 交付出同樣卓越的應用。下面,我們將解釋 Android App Bundles 可以為您提供何種幫助,並演示其使用方式。

Android App Bundle 是什麼?

Android App Bundle 是一種釋出格式 —— 精確地說,是一個帶有 .aab 副檔名的 zip 檔案。它包含應用支援的所有裝置的程式碼和資源,例如 DEX 檔案、原生程式碼庫、清單檔案、各種資原始檔等。一旦上傳用於釋出,Google Play 就會處理 APK 的簽名和生成,這個過程稱為動態交付 (Dynamic Delivery)。動態交付的用途是,根據使用者的裝置配置為使用者生成優化的 APK。那麼這究竟是怎麼做到的?

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
分拆 APK (在 Lollipop 中引入) 是從給定的 Android App Bundle 生成的,其行為與單個 APK 無異。一個典型的應用可以獲得一個基礎 APK 和多個配置 APK。而且,如果應用具有動態功能,使用者也可以獲得動態功能 APK 及其配置 APK。基本 APK 包含所有裝置配置共有的檔案,如清單檔案。配置 APK 是為您生成的,每個之中都包含有特定裝置配置的相關資源:語言、CPU 架構或螢幕畫素密度。因此,使用者將獲得標準的基本 APK (與所有其他裝置一樣) 以及僅包含使用者裝置相關資源的配置 APK。

這意味著,如果我使用的是一臺 Android One 手機 (小米 A1) 而且我設定的主要語言是英文,則這臺手機將獲得基礎 APK 以及支援英文、arm64 CPU 架構和 xhdpi 螢幕解析度的配置 APK。更棒的是,當裝置配置 (如語言) 發生變化時,Google Play 會檢測到它,並下載該語言的配置 APK。為了進一步降低 APK 大小,我們正計劃推出基於紋理壓縮格式、圖形 API 和新平臺功能的分發方案。

動態功能 APK 包含使用者首次安裝應用時不需要的應用功能程式碼和資源。開發者可以把這些用途或功能新增到他們的應用中,Google Play 會按需提供這些動態功能模組,而不是在安裝時統一新增,從而進一步減少應用下載體積。這也很好理解:我們有必要將那些消耗空間且在安裝時根本用不著的功能,以及那些很少用得著的功能,都打包進動態功能模組中,這將顯著減少使用者安裝時的檔案下載量。

安裝早於 Android Lollipop 版本的裝置也可以享受安裝檔案體積縮小的福利,但其 APK 中將包含所有語言。

在如今,很顯然構建一個統一的臃腫的 APK 的做法已經過時了。Android App Bundle 代表著 Android 應用交付的未來,接下來我們就可以看到如何構建這樣的一個安裝包。

Android App Bundle != APK

Android App Bundle 與 APK 有一些相似之處,但它們是截然不同的,且用於不同的目的。首先,App Bundle (應用束)純粹是為了上傳設計的檔案,使用者無法直接安裝和使用它。它是一個 zip 檔案,Google Play 從中生成優化的 APK 並將其提供給裝置進行安裝。應用束包含用於幫助工具生成 APK 的後設資料檔案 (這些後設資料檔案最終不會出現在 APK 中)。此外,應用束擁有嚴格的驗證標準。

從 APK 切換到應用束是一個無縫過程。如果您使用 Android Studio 3.2 及更高版本,那麼您只需點選幾下即可生成已簽名的應用束,將其上傳到 Play Store,即可讓使用者開始享受更小尺寸 APK 所帶來的便利。由於您的程式碼庫沒有重大變化,因此您無需擔心會有什麼問題發生。Android App Bundle 的早期採用者已經發現,動態交付顯著減小了他們的應用體積。一些開發者甚至可以將他們的 APK 大小減半。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
△ 一些知名 app 使用 App Bundle 減小應用體積的資料

Android App Bundle 的好處都有哪些?

Android App Bundle 為應用開發者和使用者帶來了諸多好處。這裡我們來看看其中的幾條:

  • 較小的應用意味著更多使用者可以安裝您的應用,而無需考慮刪除什麼以騰出空間。
  • 較小的應用意味著使用者不太可能解除安裝您的應用以在其裝置上騰出空間。
  • Android App Bundle 是單一工件,因此無需構建、簽名或管理多個 APK。
  • 您可以為特定用例和受眾新增動態功能,而無需增加安裝時的應用體積。

這個列表還會越來越長,許多有趣的功能很快就會提供給開發者,例如應用束即將支援免安裝應用。

構建 App Bundle

大多數應用專案都不需要花費太多精力來構建支援動態交付的應用束。實際上,如果您已根據既定慣例組織應用程式碼和資源,只需在 Android Studio 中點選幾下,就可以構建已簽名的 Android 應用束。但首先,我們需要獲得 Android Studio Canary。另外值得注意的是 Android Studio 3.2 穩定版最近已經發布。

獲得 3.2 版本的 Android Studio: developer.android.google.cn/studio/

在 Android Studio 中開啟專案後,轉到選單欄並選擇 Build > Build Bundle(s)/ APKs > Build Bundle(s)。等待生成應用束。您可以在生成應用束後的彈出視窗中點選選項來找到生成的 .aab 檔案,並進行分析。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
△ 通過選單構建 App Bundle

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
△ 構建完成後可以檢視或者分析生成的 App Bundle
這個 Android App Bundle 無法上傳到 Play Console,因為它未被簽名。想要生成簽名版本的話,請選擇Build > Generate Signed Bundle/APK… > Android App Bundle > Select Base Module > Enter Signing Credentials & Check any other options (和您操作 APK 所做的事情一樣)。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
您也可以通過命令列使用 Gradle 的打包任務生成相同的 Android App Bundle。要生成已簽名的應用束,就必須在模組的 build.gradle 檔案中配置簽名資訊。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
想要更好地控制從 Android App Bundle 進行拆分的方式的話,您可以從應用束的設定區塊中進行精確設定:

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle

方便強大的 bundletool

Bundletool 是一個用於處理 Android App Bundle 的命令列工具。使用 bundletool,您可以構建 Android App Bundle,提取連線的裝置配置,生成 APK Set 檔案 (.apks),從 APK Set 檔案中提取或安裝 APK,以及驗證應用束。由於 Android App Bundle 僅是一種釋出格式,因此 bundletool 用於生成和測試 APK。Google Play 和 IDE 使用的也是相同的工具,而且它是開源的。

Bundletool 的 GitHub 地址: github.com/google/bund…

使用 bundletool

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
這是 bundletool 接受的所有命令:build-bundle,build-apks,extract-apks,get-device-spec,install-apks,validate 和 version。使用 bundletool help 獲取有關命令的詳細資訊,例如識別符號和其他選項。

在以下示例中,我們將找到已連線裝置的配置,構建 APK,併為連線的裝置安裝 APK。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle

動態功能模組

動態功能模組讓您可以將特定的功能移動到單獨的模組中。我們使用了動態交付技術,根據需要向使用者提供這些功能。動態功能模組需要您的仔細考量,以及付出一些工作量進行實際的拆分。

有關建立和配置動態功能模組的詳細文件developer.android.google.cn/guide/app-b…

上傳到 Play Store

擁有已簽名的 Android App Bundle 後,您可以將其上傳到 Play Store,讓 Google Play 動態地為您的使用者提供優化後的 APK。您還需要開通使用 Google Play 進行應用簽名的功能,這樣才能上傳應用束。

使用 Google Play 進行應用簽名提供了一種管理應用簽名金鑰的安全方式。Google Play 會管理您的應用簽名金鑰,您只使用上傳金鑰,用於驗證您的身份。自己管理應用簽名金鑰存在風險,因為在丟失金鑰後,您將無法更新已釋出的應用; 同樣,您的金鑰很容易被盜。將簽名過程委派給 Google Play 可以讓您的金鑰更加安全,您還可以請求重置上傳金鑰。所以,您永遠不必擔心被自己的應用拒之門外。開通應用簽名後,Google Play 會自動生成並簽署傳送給使用者裝置的 APK。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
上傳後,單擊應用束並選擇 Explore App Bundle 即可查詢節省空間的大小。在這裡,您可以搜尋和下載針對特定裝置的 APK。對於列出的配置,您可以選擇 VIEW DEVICES 以檢視將獲得該特定 APK 的裝置列表。

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle
好訊息是,Android App Bundle 可以通過 Publishing API 釋出。

小結

正如我們所見,Android App Bundle 代表著 Android 應用交付的未來,提供單一的 APK 的做法已經過時。應用體積可以減小,而且還可以提供定製功能,為每個使用者提供度身定製的體驗。

更棒的是,開發者並不需要花費太大力氣就可以盡享這些收益。一些開發者已經發現應用體積大幅減少。使用者也可以獲得極大的好處,因為他們的裝置可以為音樂、電影、應用等其他內容提供更多的可用空間。開發者還可以通過使用 Android Vitals 進一步提高其應用在使用者裝置上的效能和穩定性。

"我們期待著您用更小的檔案體積,為使用者帶來優良的、個性化的體驗,並因此促進您的應用獲得更多的安裝和更大的成功。"

點選這裡瞭解 Android App Bundle 詳情

如何獲得更小的應用檔案尺寸?來了解下 Android App Bundle

訪問開發者官方中文網站,快速入門 Android 開發!

相關文章