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

你可能感兴趣的:(Android App Bundle(谷歌官方动态化框架))