iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 29
0

在結束這三十天的旅程前,還有個有趣的主題想跟各位讀者分享 - App Bundle。

App Bundle

顧名思義,App bundle 就是負責開發 app 的最後一哩路 - 打包程式碼的工具,到底 App Bundle 比起原本的 apk 有什麼好處呢,就讓我們繼續看下去!

資料來源:https://developer.android.com/guide/app-bundle

一張圖大概解釋了整個 app bundle 的優點,我們會把程式碼打包成一個 *.aab 檔案,包含了多個 modules,一個紅底色的 base module,加上零到多個綠底色的 dynamic feature module。

真正安裝的時候只會先安裝 base module,有需要的時候,我們可以透過 Play Core Library 來動態下載所需要的 dynamic feature module。

還記得我們在 modularization 章節時有提到依功能水平分 module 的好處嗎?如果你沒看過,現在讓你看看:連結

Play Core Library:https://developer.android.com/guide/app-bundle/playcore

就算我們只有一個 base module 也沒關係,app bundle 還有其他優點,上圖每個藍色區塊代表著不同裝置所需要的不同資源檔,比如說 drawable-xhdpi/drawable-hdpi/ 是不同螢幕大小所需要不同解析度的圖片存放的位置,在 app bundle 出現以前,不管下載的裝置是屬於哪種 dpi,所有的檔案會打包進同一個 apk一起裝到使用者的手機,在程式啟動後才動態決定要使用哪些檔案。

而在 app bundle 的時代,每個裝置都只會下載該裝置真正需要的檔案,而不會整包一起下載。官方統計平均大約可以省下 35% 的檔案大小,是不是很棒呢?

但因為我們給 Google play 的是 *.aab 格式的檔案,Google play 需要依據使用者需求動態組合出對應的 *.apk,所以我們必須另外啟用一個新功能 - App signing。

App signing

Sign 這個動作,是 Android 用來確認 apk 的來源是否合法而且來自相同開發者的途徑,比如說使用者 A 裝了開發者 B 寫的 com.example.myapp 之後,就不能再下載開發者 C 寫的 com.example.myapp 了,除非 B 跟 C 二個人擁有相同的 keystore。

這機制保護了開發者的程式不會被有心人竄改,另一方面也限制了 Google play 的能力,只能當個單純的下載中心。也常聽到有些開發者不小心遺失了 keystore,必須重新上架一個新的 app ,又無法良好的轉移原有的使用者。這就是為什麼 App signing 被提出來。

基本上的流程就是我們把 keystore 加密後提供給 Google play,Google play 提供給我們一組專門用來上傳的 keystore,如果這組 keystore 不見了,隨時可以跟 Google play 註銷並重新申請,而我們的 keystore 會被 Google 安全的保存在雲端上。

有興趣的讀者可以看一下 App signing 的介紹影片:https://www.youtube.com/watch?v=PuaYhnGmeEk

參考資料:
https://developer.android.com/guide/app-bundle


上一篇
[Android 十全大補] Jenkins
下一篇
[Android 十全大補] 回顧與展望
系列文
Android 十全大補30

尚未有邦友留言

立即登入留言