提纲

是什么(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(谷歌官方动态化框架)相关推荐

  1. Google官方插件化解决方案—全新的动态化框架Android App Bundles分析 Seasoninthesun

    热文导读 | 点击标题阅读 金九银十跳槽季如何进阶找到合适满意的工作? 身为程序员碰到最奇葩的需求是怎样的? 2018 年 8 月面试路:6 天 21 家公司 作者:*家伟 来源:https://zh ...

  2. Android App Bundles

    大部分在应用商店上架过App或者进行过缩包优化的开发者可能都知道,在Android平台上,APK瘦身方面的优化手段其实不多,无非压缩资源.删除无用资源.代码混淆.在线资源库.微信压缩打包工具.插件化等 ...

  3. 谷歌的android下拉刷新页面,Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新

     <Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新> 下拉刷新在如今移动开发中应用如此广泛和普遍,以至于谷歌干脆在SDK中给予支持.在android ...

  4. Android App Bundles相关概念及开发流程详解

    本文会根据官网的介绍,结合自己的一些理解,来阐述Android App Bundles的相关概念和开发流程. 主要参考文章如下. https://developer.android.com/guide ...

  5. 巧用第三方快速开发Android App 热门第三方SDK及框架

    巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...

  6. 如何自己开发一个Android APP(2)——项目框架

    .java文件 activity类 在我们创建自己的项目时,Eclipse会对应用进行设置并将主Activity作为主类--它在项目清单当中也将被作为主Activity进行显示. 这里的Activit ...

  7. android 最新框架组合,android 官方mvp框架优化:lifecycle-mvp,像前端那样组合式写页面...

    目录 1 前言 虽然在标题上,自己很随意的起了这么一个名字.其实并不是说它起个英文名就牛逼了.说白了,它其实就是mvp的思想加了lifecycle-component,然后加入了分层的思想,最后用Ty ...

  8. Android App开发基础

    Android App开发基础 App的开发特点 (1)App的运行环境 1.使用数据线把手机连到电脑上 2.在电脑上安装手机的驱动程序 3.打开手机的开发者选项并启用USB调试 4.将连接的手机设为 ...

  9. Android App安装包瘦身计划

    Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...

最新文章

  1. unix的sed 用法介绍
  2. 字节与浮点型转换软件_如何与另一个防病毒软件一起运行恶意软件字节
  3. java aspose重叠_Aspose.Words - 在特定位置合并两个文档
  4. [转载]使用命名管道实现进程间通信
  5. java excel文件读取的内容_java读取Excel文件指定内容
  6. Google App Engine 功能被滥用于创建无限制的钓鱼页面
  7. 如何让自己的email地址永久有效
  8. [UWP开发] Win10微博分享
  9. 中国准货币体系的概要简析
  10. SpringBoot中注入RedisTemplate实例异常解决
  11. SQL 语句的类型和 用法
  12. 快速创建React Native App
  13. 操作系统的概念、功能
  14. 音响为什么要做CCC认证以及流程有哪些
  15. 性能测试:工具篇:jmeter-命令行使用
  16. 亿发软件:定制WMS(仓储智能管理系统),实现仓库内部精细化管理
  17. SecureCRSecureFXPortable64 下载
  18. 《社会调查数据管理——基于Stata 14管理CGSS数据》一3.2 和统计有关的术语
  19. classmate.c
  20. c语言最大数最小数平均数,C语言编程 求两个数的平均值方法(三种方法)

热门文章

  1. 零基础搞懂智能机之手机参数怎么看
  2. 怎么实现好看的自定义进度条
  3. CAD工程数据库的建立及其访问方法
  4. 【安全知识分享】第二部分灭火器配置及消防设施(附下载)
  5. idea 的反撤销快捷键失效解决方案
  6. 微信公共平台 回复信息 换行
  7. 超级管理员这样的特权账号存在哪些安全风险
  8. 《快速念咒——MySQL自学入门指南》:第1章第7节:IN、NOT——检索巴尔干甜豆(下)
  9. 一个老程序员对后辈们的话
  10. Python-增加b站视频播放量