Android#io18筆記 — Android App Bundle 與 Dynamic Delivery

Tomaz Wang
3 min readMay 16, 2018

English Version

The docs:

總覽

Android App Bundle 是今年 Google 今年在 Google IO 上推出的新格式,與 apk 非常相同,它包含所有 app 的程式、資源。不同的是,使用者不能直接將 App Bundle 檔安裝至自己的裝置。App bundle 可以被分解成多個小區塊,Google Play Store 會將這些區塊重新組合為 apk 檔並提供使用者下載。

為什麼要這樣做呢?首先,這樣開發者將不需要為了不同版本、不同語系的裝置管理多個 apk 檔,未來只需要一個 app bundle 檔,Google Play 將會自動在使用者下載 app 時,依照使用者的裝置與需求,挑選出最適合的組合給使用者。

例如:假設我的 app 目前支援繁體中文、簡體中文與英文,包裝成 app bundle 上送給 Google Play 時,Google Play 將會把這個 app bundle 拆解成 4 個 apk 檔。一個主要功能 apk (Base Apk),與三個各自包含一種語言的組態 apk (Configuration Apk)。

當一個使用者,使用設定為英語語系的裝置下載這個 app 時,Google Play 將會判斷這個使用者的語系,將 Base Apk 與英語的 Configuration Apk 組合,產出 apk 檔給這位使用者。

Dynamic Delivery 動態發佈

上面說的這個流程,Google 稱其為 Dynamic Delivery。透過 Dynamic Delivery Google Play 可以更精準地替裝置準備專屬的 apk ,只包含他會使用到的資源。同時,Dynamic Delivery 也讓 app 有模組化的能力。開發者可以將某個獨立的功能與主要功能分開,透過 Dynamic Delivery 的幫助,讓使用者只有在使用到該功能時再做下載。

不過,因為 apk 檔是由 Google Play 產生,apk 的簽名將必須在 Google Play 上處理,因此,如果要使用 Dynamic Delivery 這個功能,必須也同時使用 signing by Google Play。

建置 App Bundle

要建置 App Bundle 只需要透過 Android Studio 3.2+ Build 選單中 Build Bundles / APKs 的功能,就樣 Apk 檔ㄧ樣的流程。當然,你也看以透過 gradle 建置。

// build apk
gradlew assembleFlavorType
// build app bundle
gradlew bundleFlavorType

就這樣!建置 App Bundle 不需要修改任何程式與配置。只是建出來的東西不同而已。

我的想法

App Bindle 鼓勵我們透過新的方式建置與部屬我們的 app。我最期待的是 Dynamic Feature:透過 App Bundle 的能力,將功能區分開,等到使用者需要下載時才下載,這樣的功能。不過,App Bundle 也有一些缺點,使用者安裝使用的 apk 檔與我們測試時的 apk 檔不同,這點令開發者緊張。另外使用 App Bundle 代表簽名流程必須得交給 Google Play,且動態下載的功能也必須透過 Google Play 才能測試。

--

--

Tomaz Wang

Sr. Android Devleoper @91APP; 🤖 android code generator, ⌨️ keyboard smasher, 🐤 rubber duck interrogator