ps: 我是 out 啦,更不上第一時(shí)間啦滤祖,這不才剛剛注意到 Google 新發(fā)布的 Android App Bundle陋气,來(lái)張圖壓壓驚
啥是 Android App Bundle
很好理解:Google 官方的插件化唄议忽。Android App Bundle = Apk 動(dòng)態(tài)打包,動(dòng)態(tài)組件化的技術(shù)汰聋,與 Instant App 不同门粪,AAB 是借助 Split Apk 完成動(dòng)態(tài)加載,使用AAB動(dòng)態(tài)下發(fā)方式烹困,可以大幅度減少應(yīng)用體積玄妈,總結(jié)下特性,就是2個(gè):
資源選擇性加載
怎么理解這個(gè) 資源選擇性加載 呢髓梅,大家先個(gè)圖:
android 因?yàn)橐m配各種不同硬件和配置拟蜻,我們有不同 dp 密度的圖片文件,語(yǔ)言文件枯饿,不同指令集的 so 等酝锅,現(xiàn)在 Android App Bundle 來(lái)了可以優(yōu)化這個(gè)問(wèn)題,當(dāng)然只限于 GooglePlay奢方,在 google 市場(chǎng)我們下載 apk 時(shí)搔扁,市場(chǎng)先會(huì)檢測(cè)我們手機(jī)的特性爸舒,然后選擇最合適的資源打成 apk 再發(fā)給我們,比如我的手機(jī)只需要 arm-v7 的 so稿蹲,hdpi 的圖片扭勉,剩下的不會(huì)下發(fā)我們,這樣可以大幅度減少 apk 的體積苛聘,尤其是對(duì)于 so 來(lái)說(shuō)涂炎,一個(gè)高德地圖,不同的 so 包加起來(lái)有小 10M 了设哗,這比我們之前自己干的 apk 優(yōu)化壓縮可強(qiáng)多了唱捣,不愧是Google 大大,一出手就是神器网梢,可惜啊震缭,Google 服務(wù)國(guó)內(nèi)用不了,不知道后續(xù)國(guó)內(nèi)會(huì)不會(huì)跟進(jìn)
動(dòng)態(tài)下發(fā)庫(kù)
這個(gè)可就是太 N 了战虏,插件化實(shí)現(xiàn)的目標(biāo)不就是解決動(dòng)態(tài)性的問(wèn)題嗎蛀序,之前看 ios,google 封殺國(guó)內(nèi)的插件化和熱修復(fù)我還悲觀了一陣活烙,但是看到 Android App Bundle 后我們還是有些竊喜的,國(guó)內(nèi)的也努力不是白費(fèi)的遣鼓,Google 這不就承認(rèn)了國(guó)人的努力嘛
App Bundles 將一個(gè) apk 拆分成多個(gè) apk啸盏,我們的 apk 一般會(huì)被拆分為如下幾個(gè)部分:
- Base Apk:首次安裝的apk,公共代碼和資源骑祟,所以其他的模塊都基于Base Apk回懦;
- Configuration APKs:native libraries 和適配當(dāng)前手機(jī)屏幕分辨率的資源;
- Dynamic feature APKs:不需要在首次安裝就加載的模塊次企。
當(dāng)然啊注意 AAB 并不是一個(gè)插件化框架怯晕,它利用的是 Android Framework 提供的 split apks 技術(shù)來(lái)完成的,而所有安裝 split apk 工作均是通過(guò) IPC 交由 google play 完成缸棵,而不是國(guó)內(nèi)插件化技術(shù)的反射代理 hook舟茶, 想了解更多關(guān)于split apks的內(nèi)容,請(qǐng)看 官方文檔
另外一點(diǎn) Android App Bundle 很像阿里的動(dòng)態(tài)化容器框架 Quinox堵第,Quinox 里每個(gè)動(dòng)態(tài)部署的庫(kù)也叫 Bundle吧凉,不說(shuō)這塊是不是有什么 PY 交易在里面呢,Quinox 目前沒有開源踏志,應(yīng)該是阿里插件化 Atlas 的進(jìn)化阀捅,詳情請(qǐng)看:支付寶客戶端架構(gòu)解析:Android 容器化框架初探
需要 Android Studio 升級(jí)為 3.2 及其以上版本,以添加對(duì) Dynamic Delivery 的支持针余,會(huì)把 base app 構(gòu)建出構(gòu)建成 .aab 文件
Android App Bundle 與 APK 不同饲鄙,App Bundle 純粹是為了上傳文件而設(shè)計(jì)的凄诞,用戶無(wú)法直接安裝和使用它,.aab 只是一個(gè) zip 文件忍级,Google Play 從中生成優(yōu)化的 APK 并將其提供給設(shè)備進(jìn)行安裝帆谍。可以考哪考哪 .abb 中的內(nèi)容:
然后新的可動(dòng)態(tài)部署的庫(kù)會(huì)以 apk 的形式添加進(jìn)來(lái)颤练,具體請(qǐng)看 google 官方號(hào):如何獲得更小的應(yīng)用文件尺寸既忆?來(lái)了解下 Android App Bundle