由于博主长期从事海外App的开发,所以心系谷歌爸爸的动向呀,最近谷歌爸爸推出了一个Android App Bundle的东西,据说可以压缩包体,当然这仅限于上传Google Play的应用,国内市场不支持,当然我们也可以学习谷歌爸爸的思想。

概述

Android App Bundle是Google最新推出的Apk动态打包,动态组件化的技术,与Instant App不同,AAB是借助Split Apk完成动态加载,使用AAB动态下发方式,可以大幅度减少应用体积。

从这个动态图中,我们就可以大概知道了App Bundle的原理是什么,App Bundle将这些特性在多个维度进行拆分,在资源维度,ABI维度和Language维度进行了拆分,你只要按需组装你的Apk然后安装即可。再说的直白一点就是,比如,项目中可能会xxhdpi,xhdpi各有一套图,或者x86,armeabi的又各有一套so库,以前的安装方式,是把这些全部装进用户的手机中,使用App Bundle,假设你是一个x86,xxhdpi的手机,那么App Bundle会帮你拼装好一个apk,这个apk的资源只有xxhdpi的,而且so库只有x86,其他无关的都会剔除。

App Bundles将一个apk拆分成多个apk,我们的apk一般会被拆分为如下几个部分:

Base Apk:首次安装的apk,公共代码和资源,所以其他的模块都基于Base Apk;
Configuration APKs:native libraries 和适配当前手机屏幕分辨率的资源;
Dynamic feature APKs:不需要在首次安装就加载的模块。

AAB并不是一个插件化框架,它利用的是Android Framework提供的split apks技术来完成的,而所有安装split apk工作均是通过IPC交由google play完成。 想了解更多关于split apks的内容,请关注这里:
https://developer.android.com/studio/build/configure-apk-splits?authuser=2

如何使用App Bundle


1.将你的Android Studio升级为3.2及其以上版本
2.添加对Dynamic Delivery的支持
其实就是一些基础apk需要东西,比如签名,MAIN入口等,详细请阅读:
https://developer.android.google.cn/studio/projects/dynamic-delivery
3.构建App Bundle

当你是3.2以上的studio时候,就可以选择build bundle,来构建app bundle的文件

构建出来就是一个.aab文件

4.通过bundletool工具来测试你的.aab文件
下载地址:https://github.com/google/bundletool
解压出来就是一个jar包,以bundletool-all-0.6.0.jar为例子

bundletool-all-0.6.0.jar build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

这个命令构建出来的是没有签名的文件,要有签名的,需要如下:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

这些参数的说明详见如下:

无疑就是一些打包的签名,密码等,还有一些特殊的属性,详细大家可以看英文介绍,使用命令后,出来的是app.apks文件,我们可以解压缩一下,出来就是如下的内容:

从打包出来的东西,更印证了我们前面所说的原理

5.app的签名上传google play
6.将你的包上传到google console

兼容性问题

Api < 21的手机无法进行模块化,Google Play会对其进行Multiple Apks操作来进行下发操作。
Enable on-demand: 是否启用按需下载,如果不启用,会直接打进Apk
Fusing:熔断操作,是否安装到不支持按需下载的设备中
Module title: 模块标题

对于动态组件的一些使用场景

语言包的动态下发
当Split 针对语言进行划分时候,用户下载的Apk仅仅只能下载下来一个Base Apk,包含他的当前系统语言,你可以将其他语言包作为Dynamic feature下发给用户,做到语言包的动态下发

功能的动态下发
对于某些独立的feature,这其实跟之前的插件化方案有异曲同工之处,而且天然支持友好,动态下发业务需求能有效的减少包大小,增加启动速度,减少安装时间等等。

Android App瘦身新姿势——Android App Bundle相关推荐

  1. Android App 瘦身总结

    随着移动端产品功能的逐渐增加,APP 的体积也不可避免地呈现上升趋势,如果不加以重视,几个版本迭代下来,可能你的 APP 体积会达到用户不能忍受的程度. 如果你是 SDK 开发者,你的 SDK 包大小 ...

  2. Android App 瘦身总结 第三章 代码混淆及优化

    目录 一.代码混淆proguard 二.调整第三方库 三.环境差异依赖 四.代码习惯 五.插件化 六.总结 在前两章我们分别从图片资源和jni动态库这两个方面来分析apk瘦身的优化点 Android ...

  3. Android App 瘦身总结 第一章 图片资源的优化处理

    目录 一.去除无用的资源 二.忽略占比极少的分辨率 三.优化图片 四.使用更先进的图片格式 (1)使用矢量图 (2)使用webp图片格式 五.总结 当一款App经历了大量的迭代后,apk包会越来越臃肿 ...

  4. Android App 瘦身总结 第二章 jni动态库及cpu兼容

    目录 一.利弊分析,按需引用 二.平台兼容 三.动态加载 四.总结 在前一章主要分析了图片资源部分的优化(Android App 瘦身总结 第一章 图片资源的优化处理_There is a Bug!! ...

  5. Android中app瘦身方式

    App瘦身的概念 App瘦身是指在不减少App功能的前提下,通过一些技巧将打包出来的apk体的体积尽可能减少.  这样做的好处有几个:加快用户下载速度,节省用户下载流量,提升用户下载体验.  如果不进 ...

  6. App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)

    本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. 本文的示例代码主要是基于作者的经验来编写的,若你有其他 ...

  7. App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)

    Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...

  8. App 瘦身最佳实践

    原文链接:www.jianshu.com Android本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. ...

  9. Android Apk瘦身指南大全

    Android Apk瘦身指南大全 前言 为什么Android应用Apk要瘦身?虽然安装包大小对应用使用没有影响,但应用的安装包越大,用户下载的门槛越高,安装等待时间也会越长,特别是在移动网络情况下, ...

  10. APK瘦身-是时候给App进行减负了

    前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装.前一段时间我司某一App进行APK的瘦身,最终也达到了减小10M的目标,现做一个简单的总结记录. ...

最新文章

  1. Android studio 真机联调闪退
  2. 错误处理:one of the variables needed for gradient computation has been modified by inplace operation
  3. matlab调用q外部exe文件,Matlab GUI调用外部程序生成exe,DOS窗口输入问题
  4. 兼容单片机的CRC32查表计算程序的C语言实现
  5. 能让你少写1000行代码的20个正则表达式
  6. 【状压DP】吃货JYY(luogu 6085)
  7. 安卓 图像清晰度识别_智能车牌识别系统的常见故障和解决方法
  8. 运动世界校园显示服务器开小差,小学新生入学适应存在的问题及教育对策 ——以徐州市某小学为例...
  9. js字符串string转object对象 - 方法篇
  10. TCP校验值的伪头以及校验值计算
  11. webgl漫反射公式物理原理猜测
  12. 进击的Libra:路在何方?中国应如何应对?
  13. EDK II Module Writers Guide上
  14. Python:Wilcoxon signed-rank test
  15. 《机器学习基础》学习笔记-1
  16. 数据在计算机中存储形式
  17. ORACLE数据库报错ORA-01034
  18. 【转载】网站关闭了域名备案信息是否需要注销,答案是一定要记得注销域名备案信息,防止域名过期后被他人注册用于非法用途而带来不必要的麻烦...
  19. 机器学习笔记~五种常见的聚类算法简介
  20. C语言学习第一步——软件下载VS, VC, VS code

热门文章

  1. app违规收集个人信息被通报了怎么办?教你如何整改
  2. 应用程序界面开发 - 自定义用户控件布局控件的使用
  3. python增加一列数据_使用Python向DataFrame中指定位置添加一列或多列的方法
  4. 用python实现监听微信撤回消息
  5. 【Linux】动静态库及gdb的使用
  6. 嵌入式linux模块复位,嵌入式linux下复位声卡驱动
  7. 一个网页设计需求方眼中的网页设计
  8. pyqt5做了一个二维码生成器,已打包成exe可执行程序...
  9. ppt无损转图片jpg,pdf api
  10. hnu 数字电路 实验1.1 异或门