Android App Bundles(谷歌官方动态化框架)
提纲
是什么(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的对比示意图:
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%
aab的四个新功能
1. 应用内更新:即时or灵活
两种更新方式
即时更新,在应用内直接触发模块更新,用户停留在更新流程中直到更新完成。确认更新-更新下载,下载完成,安装(google管理流程)-继续使用
灵活更新:提示用户有新的更新-用户确认更新-google管理进行下载,下载的时候用户正常使用app-下载完成以后google提示重启,使用新的app
2. 按条件分发 根据国家,版本,机型是否有什么功能的维度,在安装时将模块发给用户
指定国家,版本,是否有ar功能等
指定参数,版本,功能
指定国家
3. 按需分发 根据场景,需要用到功能时,才分发相应模块给用户安装
定制应用的哪个功能,在什么时候,发给什么用户。如对于有上传需求的用户,需要上传时,才分发上传的功能模块
示例1:在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分发好
怎么进行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 Bundles(谷歌官方动态化框架)相关推荐
- Google官方插件化解决方案—全新的动态化框架Android App Bundles分析 Seasoninthesun
热文导读 | 点击标题阅读 金九银十跳槽季如何进阶找到合适满意的工作? 身为程序员碰到最奇葩的需求是怎样的? 2018 年 8 月面试路:6 天 21 家公司 作者:*家伟 来源:https://zh ...
- Android App Bundles
大部分在应用商店上架过App或者进行过缩包优化的开发者可能都知道,在Android平台上,APK瘦身方面的优化手段其实不多,无非压缩资源.删除无用资源.代码混淆.在线资源库.微信压缩打包工具.插件化等 ...
- 谷歌的android下拉刷新页面,Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新
<Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新> 下拉刷新在如今移动开发中应用如此广泛和普遍,以至于谷歌干脆在SDK中给予支持.在android ...
- Android App Bundles相关概念及开发流程详解
本文会根据官网的介绍,结合自己的一些理解,来阐述Android App Bundles的相关概念和开发流程. 主要参考文章如下. https://developer.android.com/guide ...
- 巧用第三方快速开发Android App 热门第三方SDK及框架
巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...
- 如何自己开发一个Android APP(2)——项目框架
.java文件 activity类 在我们创建自己的项目时,Eclipse会对应用进行设置并将主Activity作为主类--它在项目清单当中也将被作为主Activity进行显示. 这里的Activit ...
- android 最新框架组合,android 官方mvp框架优化:lifecycle-mvp,像前端那样组合式写页面...
目录 1 前言 虽然在标题上,自己很随意的起了这么一个名字.其实并不是说它起个英文名就牛逼了.说白了,它其实就是mvp的思想加了lifecycle-component,然后加入了分层的思想,最后用Ty ...
- Android App开发基础
Android App开发基础 App的开发特点 (1)App的运行环境 1.使用数据线把手机连到电脑上 2.在电脑上安装手机的驱动程序 3.打开手机的开发者选项并启用USB调试 4.将连接的手机设为 ...
- Android App安装包瘦身计划
Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...
最新文章
- unix的sed 用法介绍
- 字节与浮点型转换软件_如何与另一个防病毒软件一起运行恶意软件字节
- java aspose重叠_Aspose.Words - 在特定位置合并两个文档
- [转载]使用命名管道实现进程间通信
- java excel文件读取的内容_java读取Excel文件指定内容
- Google App Engine 功能被滥用于创建无限制的钓鱼页面
- 如何让自己的email地址永久有效
- [UWP开发] Win10微博分享
- 中国准货币体系的概要简析
- SpringBoot中注入RedisTemplate实例异常解决
- SQL 语句的类型和 用法
- 快速创建React Native App
- 操作系统的概念、功能
- 音响为什么要做CCC认证以及流程有哪些
- 性能测试:工具篇:jmeter-命令行使用
- 亿发软件:定制WMS(仓储智能管理系统),实现仓库内部精细化管理
- SecureCRSecureFXPortable64 下载
- 《社会调查数据管理——基于Stata 14管理CGSS数据》一3.2 和统计有关的术语
- classmate.c
- c语言最大数最小数平均数,C语言编程 求两个数的平均值方法(三种方法)