Android App Bundle(谷歌官方動(dòng)態(tài)化框架)

提綱

是什么(Android App Bundles簡介)

為什么使用(aab的四個(gè)新功能及實(shí)用性)

怎么使用(怎么進(jìn)行aab的改造)

怎么測試(可以通過google市場測試 而本文主要介紹aab本地測試工具 Bundletool)

簡介

Android App Bundles(以下簡稱AAB)是2018年Google I/O大會(huì)帶來的一款全新動(dòng)態(tài)化框架奸腺,與Instant App不同,AAB是借助Split Apk完成動(dòng)態(tài)加載脆炎。AAB的技術(shù)特點(diǎn)如下:

1. 不同于傳統(tǒng)的App以整個(gè)Apk為單位录平,一個(gè)App被分割成了一個(gè)base Apk和多個(gè)split Apk庄撮。

2. Apk在安裝后,可以按需請求下發(fā)或者更新模塊Apk。

3. split Apk可以根據(jù)配置進(jìn)行更細(xì)的劃分圃泡,并根據(jù)當(dāng)前運(yùn)行的設(shè)備特征來請求特定的Apk窥浪。

4. 請求與安裝過程必須通過Google Play商店進(jìn)行祖很,Google進(jìn)一步統(tǒng)一標(biāo)準(zhǔn)和鞏固自身生態(tài)。

5. split Apk功能只在Android 5.0(API 21)及以上機(jī)型使用漾脂,針對Android 4.4及以下機(jī)型Google Play商店仍會(huì)下發(fā)完整的Apk假颇,以此來向下兼容。

以下是AAB運(yùn)行時(shí)動(dòng)態(tài)加載Apk與傳統(tǒng)方式下發(fā)Apk的對比示意圖:

Dynamic Delivery示意效圖

AAB是一個(gè)動(dòng)態(tài)化框架骨稿,它是利用Android Framework提供的split apks功能完成笨鸡。所有安裝split apk工作均是通過IPC交由google play完成。

好處

- Size 更刑构凇(最高可以減少 50% 應(yīng)用體積)

- 安裝更快 ( base.apk + split apks)

- Android App Bundle 是單一工件形耗,因此無需構(gòu)建、簽名或管理多個(gè) APK

- 支持動(dòng)態(tài)發(fā)布 (為特定用戶添加動(dòng)態(tài)功能辙浑,而無需增加安裝時(shí)的應(yīng)用體積)

- 官方提供的系統(tǒng)級插件化方案

限制和成本

- 僅限于通過 Google Play 發(fā)布的應(yīng)用激涤,(Google 進(jìn)一步鞏固自身生態(tài))

- 需要加入到 Google 的 beta program

- 最低支持版本 Android 5.0 (API level 21)

- 低于 Android 5.0 (API level 21) 的版本 GooglePlay 會(huì)優(yōu)化 Size,但不支持動(dòng)態(tài)交付判呕。

- 需要升級到 Android Studio 3.2 以上倦踢,修改工程結(jié)構(gòu)以便支持 App Bundle 格式

集成 Play Core Library

已知問題

- 不支持動(dòng)態(tài)修改 resource tables

- 在 dynamic feature 模塊的清單文件里,不能引用不在 base 模塊里的資源

- 在 AS 中侠草,更改 base 模塊的 build variant辱挥,并不會(huì)自動(dòng)更改依賴 base 的其他模塊,所以構(gòu)建時(shí)可能會(huì)報(bào)錯(cuò)

- 不同模塊 build configuration 不同边涕,可能會(huì)有沖突晤碘,導(dǎo)致構(gòu)建或運(yùn)行時(shí)出錯(cuò)愧哟,比如 buildTypes.release.debuggable = true

- 由于 AAB 可能包含多個(gè) apk 文件,所以在把 apk 發(fā)送到設(shè)備時(shí)可能會(huì)因找不到資源哼蛆,導(dǎo)致運(yùn)行時(shí)異常蕊梧,比如 adb刷機(jī)( sideloading )

- 動(dòng)態(tài)下載模塊需要安裝最新的 Play Store app,所以有很小概率下載 app 時(shí)會(huì)回滾為下載一個(gè) multi-APK(為 Android 4.4以下設(shè)備提供)

通過appbundle 很多應(yīng)用都減少了較多的體積腮介,平均減少體積為11%


眾多app使用aab后減少很多體積

aab的四個(gè)新功能


1. 應(yīng)用內(nèi)更新:即時(shí)or靈活

應(yīng)用內(nèi)更新

兩種更新方式

即時(shí)更新

即時(shí)更新肥矢,在應(yīng)用內(nèi)直接觸發(fā)模塊更新,用戶停留在更新流程中直到更新完成叠洗。確認(rèn)更新-更新下載甘改,下載完成,安裝(google管理流程)-繼續(xù)使用

靈活更新

靈活更新:提示用戶有新的更新-用戶確認(rèn)更新-google管理進(jìn)行下載灭抑,下載的時(shí)候用戶正常使用app-下載完成以后google提示重啟十艾,使用新的app

2. 按條件分發(fā) 根據(jù)國家,版本腾节,機(jī)型是否有什么功能的維度忘嫉,在安裝時(shí)將模塊發(fā)給用戶

?按條件分發(fā)?

指定國家,版本案腺,是否有ar功能等

指定國家庆冕,版本,是否有ar功能等

指定參數(shù)劈榨,版本访递,功能

指定參數(shù),版本同辣,功能

指定國家

指定國家

3. 按需分發(fā) 根據(jù)場景拷姿,需要用到功能時(shí),才分發(fā)相應(yīng)模塊給用戶安裝

定制應(yīng)用的哪個(gè)功能旱函,在什么時(shí)候响巢,發(fā)給什么用戶。如對于有上傳需求的用戶陡舅,需要上傳時(shí)抵乓,才分發(fā)上傳的功能模塊

示例1:在app內(nèi)提示下載相關(guān)模塊和進(jìn)行安裝

在app內(nèi)提示下載相關(guān)模塊和進(jìn)行安裝

示例2:安裝時(shí)有新手模塊伴挚,運(yùn)行后續(xù)卸載新手模塊

安裝時(shí)有新手模塊靶衍,運(yùn)行后續(xù)卸載新手模塊

按需請求模塊關(guān)鍵代碼

按需請求模塊關(guān)鍵代碼

按需刪除模塊(模塊卸載不會(huì)立即發(fā)生。也就是說茎芋,設(shè)備會(huì)根據(jù)需要在后臺(tái)卸載它們颅眶,以節(jié)省存儲(chǔ)空間)

按需刪除模塊

Play Feature Delivery 概覽 使用功能模塊實(shí)現(xiàn)自定義分發(fā)

https://developer.android.google.cn/guide/app-bundle/play-feature-delivery

處理請求錯(cuò)誤

https://developer.android.google.cn/guide/playcore/play-feature-delivery#handle_request_errors

4.游戲資源分發(fā) :根據(jù)設(shè)備分發(fā)

游戲可以大到1gb,或者分更多的資源包

游戲資源分發(fā)

為什么比cdn分發(fā)好

為什么比cdn分發(fā)好

怎么進(jìn)行aab的改造

怎么進(jìn)行aab的改造

Codelab

按需模塊田弥,可幫助您打造按需下載和安裝功能的應(yīng)用涛酗。(官方的手把手教學(xué))

https://developer.android.com/codelabs/on-demand-dynamic-delivery

在您的項(xiàng)目中添加 Play Core 庫

https://developer.android.google.cn/guide/playcore/play-feature-delivery#include_playcore

Play Feature Delivery 概覽 使用功能模塊實(shí)現(xiàn)自定義分發(fā)

https://developer.android.google.cn/guide/app-bundle/play-feature-delivery

測試工具 Bundletool 介紹

aab可以上傳google市場進(jìn)行測試(需要開發(fā)者賬號(hào)),本地測試可以用這個(gè)工具來進(jìn)行

Bundletool是一個(gè)用于處理 Android App Bundle 的命令行工具。使用 bundletool商叹,您可以構(gòu)建 AAB燕刻,提取連接的設(shè)備配置,生成 APK Set 文件 (.apks)剖笙,從 APK Set 文件中提取或安裝 APK卵洗,以及驗(yàn)證 App Bundle。由于 AAB 僅是一種發(fā)布格式弥咪,因此 bundletool 用于生成和測試 APK过蹂。

構(gòu)建aab

用 Bundletool 工具測試 AAB

1. 下載 bundletool:下載地址https://github.com/google/bundletool/releases/tag/1.6.0?

2. 切換到 aab 所在文件夾,生成 apks 文件

bundletool build-apks --bunlde=[bundle_name].aab --output=./[bundle_name].apks

3. 如果要 build 簽名的 apks 文件聚至,則需要加上 keystore 設(shè)置

bundletool build-apks --bundle=.aab --output=.apks --ks=[your_keystorename].jks/.keystore --ks-pass=pass: [your_keystore_pass] --ks-key-alias=[your_keystore_alias]? --key-pass=pass:[your_keystore_pass]

4. 將 apks 安裝在當(dāng)前連接的設(shè)備上

bundletool install-apks --apks=[bundle_name].apks

可以看到只有對應(yīng)的幾個(gè)apk安裝到設(shè)備中

另外介紹幾個(gè)有用的功能:

輸出當(dāng)前設(shè)備對應(yīng)的設(shè)備信息

bundletool get-device-spec --output=tcl.json --adb=/Library/Android_sdk/platform-tools/adb

生成當(dāng)前設(shè)備對應(yīng)的 apks

bundletool build-apks --connected-device --bundle=app.aab --output=./app1.apks --adb=/Library/Android_sdk/platform-tools/adb

根據(jù)aab文件生成一個(gè)全量apk

bundletool-all-0.10.3.jar build-apks --bundle=app.aab --output=all.apks --mode=universal

更多命令集合

https://blog.csdn.net/javaniceyou/article/details/107714732

在本地測試功能分發(fā)選項(xiàng)

https://developer.android.google.cn/guide/app-bundle/test/testing-fakesplitinstallmanager

參考

Android App Bundle探索

https://blog.csdn.net/qq_34519487/article/details/104060327?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8.control

Android App Bundle解析

https://zhuanlan.zhihu.com/p/86995941

Android新特性——App Bundles

https://blog.csdn.net/kdsde/article/details/104002500

視頻介紹地址

https://www.bilibili.com/video/BV1nJ411w7p3?from=search&seid=9721899851768761615

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酷勺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扳躬,更是在濱河造成了極大的恐慌脆诉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贷币,死亡現(xiàn)場離奇詭異库说,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)片择,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門潜的,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人字管,你說我怎么就攤上這事啰挪。” “怎么了嘲叔?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵亡呵,是天一觀的道長。 經(jīng)常有香客問我硫戈,道長锰什,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任丁逝,我火速辦了婚禮汁胆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霜幼。我一直安慰自己嫩码,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布罪既。 她就那樣靜靜地躺著铸题,像睡著了一般铡恕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丢间,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天探熔,我揣著相機(jī)與錄音,去河邊找鬼烘挫。 笑死祭刚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的墙牌。 我是一名探鬼主播涡驮,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喜滨!你這毒婦竟也來了捉捅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤虽风,失蹤者是張志新(化名)和其女友劉穎棒口,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辜膝,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡无牵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厂抖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茎毁。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忱辅,靈堂內(nèi)的尸體忽然破棺而出七蜘,到底是詐尸還是另有隱情,我是刑警寧澤墙懂,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布橡卤,位于F島的核電站,受9級特大地震影響损搬,放射性物質(zhì)發(fā)生泄漏碧库。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一巧勤、第九天 我趴在偏房一處隱蔽的房頂上張望嵌灰。 院中可真熱鬧,春花似錦踢关、人聲如沸伞鲫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秕脓。三九已至稳摄,卻和暖如春悯姊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背精居。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工搂鲫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傍药,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓魂仍,卻偏偏與公主長得像拐辽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子擦酌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容