Android App Bundle(谷歌官方动态化框架)

提纲

是什么(Android App Bundles简介)

为什么使用(aab的四个新功能及实用性)

怎么使用(怎么进行aab的改造)

怎么测试(可以通过google市场测试 而本文主要介绍aab本地测试工具 Bundletool)

简介

Android App Bundles(以下简称AAB)是2018年Google I/O大会带来的一款全新动态化框架,与Instant App不同,AAB是借助Split Apk完成动态加载。AAB的技术特点如下:

1. 不同于传统的App以整个Apk为单位,一个App被分割成了一个base Apk和多个split Apk。

2. Apk在安装后,可以按需请求下发或者更新模块Apk。

3. split Apk可以根据配置进行更细的划分,并根据当前运行的设备特征来请求特定的Apk。

4. 请求与安装过程必须通过Google Play商店进行,Google进一步统一标准和巩固自身生态。

5. split Apk功能只在Android 5.0(API 21)及以上机型使用,针对Android 4.4及以下机型Google Play商店仍会下发完整的Apk,以此来向下兼容。

以下是AAB运行时动态加载Apk与传统方式下发Apk的对比示意图:

Dynamic Delivery示意效图

AAB是一个动态化框架,它是利用Android Framework提供的split apks功能完成。所有安装split apk工作均是通过IPC交由google play完成。

好处

- Size 更小(最高可以减少 50% 应用体积)

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

- Android App Bundle 是单一工件,因此无需构建、签名或管理多个 APK

- 支持动态发布 (为特定用户添加动态功能,而无需增加安装时的应用体积)

- 官方提供的系统级插件化方案

限制和成本

- 仅限于通过 Google Play 发布的应用,(Google 进一步巩固自身生态)

- 需要加入到 Google 的 beta program

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

- 低于 Android 5.0 (API level 21) 的版本 GooglePlay 会优化 Size,但不支持动态交付。

- 需要升级到 Android Studio 3.2 以上,修改工程结构以便支持 App Bundle 格式

集成 Play Core Library

已知问题

- 不支持动态修改 resource tables

- 在 dynamic feature 模块的清单文件里,不能引用不在 base 模块里的资源

- 在 AS 中,更改 base 模块的 build variant,并不会自动更改依赖 base 的其他模块,所以构建时可能会报错

- 不同模块 build configuration 不同,可能会有冲突,导致构建或运行时出错,比如 buildTypes.release.debuggable = true

- 由于 AAB 可能包含多个 apk 文件,所以在把 apk 发送到设备时可能会因找不到资源,导致运行时异常,比如 adb刷机( sideloading )

- 动态下载模块需要安装最新的 Play Store app,所以有很小概率下载 app 时会回滚为下载一个 multi-APK(为 Android 4.4以下设备提供)

通过appbundle 很多应用都减少了较多的体积,平均减少体积为11%


众多app使用aab后减少很多体积

aab的四个新功能


1. 应用内更新:即时or灵活

应用内更新

两种更新方式

即时更新

即时更新,在应用内直接触发模块更新,用户停留在更新流程中直到更新完成。确认更新-更新下载,下载完成,安装(google管理流程)-继续使用

灵活更新

灵活更新:提示用户有新的更新-用户确认更新-google管理进行下载,下载的时候用户正常使用app-下载完成以后google提示重启,使用新的app

2. 按条件分发 根据国家,版本,机型是否有什么功能的维度,在安装时将模块发给用户

 按条件分发 

指定国家,版本,是否有ar功能等

指定国家,版本,是否有ar功能等

指定参数,版本,功能

指定参数,版本,功能

指定国家

指定国家

3. 按需分发 根据场景,需要用到功能时,才分发相应模块给用户安装

定制应用的哪个功能,在什么时候,发给什么用户。如对于有上传需求的用户,需要上传时,才分发上传的功能模块

示例1:在app内提示下载相关模块和进行安装

在app内提示下载相关模块和进行安装

示例2:安装时有新手模块,运行后续卸载新手模块

安装时有新手模块,运行后续卸载新手模块

按需请求模块关键代码

按需请求模块关键代码

按需删除模块(模块卸载不会立即发生。也就是说,设备会根据需要在后台卸载它们,以节省存储空间)

按需删除模块

Play Feature Delivery 概览 使用功能模块实现自定义分发

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

处理请求错误

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

4.游戏资源分发 :根据设备分发

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

游戏资源分发

为什么比cdn分发好

为什么比cdn分发好

怎么进行aab的改造

怎么进行aab的改造

Codelab

按需模块,可帮助您打造按需下载和安装功能的应用。(官方的手把手教学)

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

在您的项目中添加 Play Core 库

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

Play Feature Delivery 概览 使用功能模块实现自定义分发

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

测试工具 Bundletool 介绍

aab可以上传google市场进行测试(需要开发者账号),本地测试可以用这个工具来进行

Bundletool是一个用于处理 Android App Bundle 的命令行工具。使用 bundletool,您可以构建 AAB,提取连接的设备配置,生成 APK Set 文件 (.apks),从 APK Set 文件中提取或安装 APK,以及验证 App Bundle。由于 AAB 仅是一种发布格式,因此 bundletool 用于生成和测试 APK。

构建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 设置

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 安装在当前连接的设备上

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

可以看到只有对应的几个apk安装到设备中

另外介绍几个有用的功能:

输出当前设备对应的设备信息

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

生成当前设备对应的 apks

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

根据aab文件生成一个全量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

在本地测试功能分发选项

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容