Android App Bundle 與發布部署
當開發完成並準備將 App 上架到 Google Play 時,你不再需要(也不應該)手動處理龐大的 APK。Android App Bundle (AAB) 已成為發布的標準格式,它徹底改變了我們交付 App 的方式。
什麼是 App Bundle (.aab)?
AAB 並非直接安裝在手機上的檔案,而是一個「發布格式」。它將所有程式碼與資源封裝在一起,交由 Google Play 處理。
Split APKs 機制
與單一 APK (Universal APK) 不同,Google Play 會根據裝置的規格,動態生成並分發「量身定做」的 APK 給使用者。
- ABI (CPU):只下載裝置支援的架構(如 arm64-v8a)。
- 螢幕密度 (Density):只下載符合螢幕解析度的圖片資源(如 xxhdpi)。
- 語言 (Language):只下載使用者設定的語言包。
這通常能減少 20%~50% 的下載體積!
如何產生 App Bundle (.aab)
你可以透過 Android Studio 的圖形介面或使用開發終端機指令來產出 AAB 檔案。
方式 A:使用 Android Studio (GUI)
這是最常用的手動發布方法:
- 點擊選單列的
Build->Generate Signed Bundle / APK...。 - 選擇
Android App Bundle並點擊Next。 - 選擇你的 Keystore 金鑰檔案並輸入密碼(若無金鑰,請點擊
Create new...建立)。 - 選擇
release變體,點擊Create。 - 完成後,Android Studio 會在右下角顯示通知,你可以點擊
locate快速跳轉到檔案路徑。
方式 B:使用 Gradle 指令 (CLI)
適合用於 CI/CD 自動化流程:
./gradlew bundleRelease
產出路徑
不論使用哪種方式,產出的 .aab 檔案預設會儲存在:
app/build/outputs/bundle/release/app-release.aab
動態交付與功能模組 (Feature Modules)
透過 AAB,你可以實作 功能模組 (Feature Modules)。這允許你將不常用的功能(例如「客戶端設定」或「高級編輯器」)拆分出來。
- 依需求下載 (On-demand):當使用者點擊該功能時,才從 Google Play 下載並安插到 App 中。
- 條件式安裝:根據國家、裝置功能(如:是否有攝影機)來決定是否安裝。
簽署安全性 (App Signing)
Android 要求所有 App 都必須經過數位簽署。現在官方推薦使用 Google Play App Signing。
Play App Signing 的優勢
- 安全性:加密儲存在 Google 伺服器上的「發布金鑰」即便你的本地簽署金鑰遺失,Google 也能協助你重設。
- 效能:Google 可以代表你根據最新技術重新優化 APK。
KE Store (.jks) 管理
如果你是自行管理金鑰,請務必遵循:
- 備份:金鑰遺失等於永遠無法更新既有 App。
- 脫鉤:絕對不要將 Keystore 檔案上傳到 Git。
Gradle 安全簽署配置
為了 CI/CD 或團隊開發,我們會在 build.gradle.kts 配置簽署。切記不要硬編碼密碼。
方案 A:使用 local.properties (適合個人開發)
signingConfigs {
create("release") {
val properties = Properties().apply {
load(rootProject.file("local.properties").inputStream())
}
storeFile = file(properties.getProperty("storeFile"))
storePassword = properties.getProperty("storePassword")
keyAlias = properties.getProperty("keyAlias")
keyPassword = properties.getProperty("keyPassword")
}
}
方案 B:使用環境變數 (適合 CI/CD)
signingConfigs {
create("release") {
storeFile = file(System.getenv("KEYSTORE_PATH") ?: "keystore.jks")
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD")
}
}
本地測試工具:bundletool
由於 AAB 不能直接安裝,你需要官方工具 bundletool 來測試流程。
生成 APK 集合
bundletool build-apks --bundle=app.aab --output=app.apks
安裝到測試機
這會自動偵測連線裝置的規格,並只安裝必要的 Split APKs:
bundletool install-apks --apks=app.apks
版本控制 (Versioning)
在發布時,請區分兩個重要欄位:
- versionCode:整數,每次上傳必須增加(Google Play 用於判斷更新)。
- versionName:字串,顯示給使用者看的版本號(如 "1.2.3")。
保護好你的簽署金鑰,並利用 AAB 的優勢來優化下載速度與體積,這對全球市場尤其是網路環境較差的地區非常重要。