Android App瘦身新姿势——Android App Bundle
由于博主长期从事海外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相关推荐
- Android App 瘦身总结
随着移动端产品功能的逐渐增加,APP 的体积也不可避免地呈现上升趋势,如果不加以重视,几个版本迭代下来,可能你的 APP 体积会达到用户不能忍受的程度. 如果你是 SDK 开发者,你的 SDK 包大小 ...
- Android App 瘦身总结 第三章 代码混淆及优化
目录 一.代码混淆proguard 二.调整第三方库 三.环境差异依赖 四.代码习惯 五.插件化 六.总结 在前两章我们分别从图片资源和jni动态库这两个方面来分析apk瘦身的优化点 Android ...
- Android App 瘦身总结 第一章 图片资源的优化处理
目录 一.去除无用的资源 二.忽略占比极少的分辨率 三.优化图片 四.使用更先进的图片格式 (1)使用矢量图 (2)使用webp图片格式 五.总结 当一款App经历了大量的迭代后,apk包会越来越臃肿 ...
- Android App 瘦身总结 第二章 jni动态库及cpu兼容
目录 一.利弊分析,按需引用 二.平台兼容 三.动态加载 四.总结 在前一章主要分析了图片资源部分的优化(Android App 瘦身总结 第一章 图片资源的优化处理_There is a Bug!! ...
- Android中app瘦身方式
App瘦身的概念 App瘦身是指在不减少App功能的前提下,通过一些技巧将打包出来的apk体的体积尽可能减少. 这样做的好处有几个:加快用户下载速度,节省用户下载流量,提升用户下载体验. 如果不进 ...
- App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)
本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. 本文的示例代码主要是基于作者的经验来编写的,若你有其他 ...
- App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)
Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...
- App 瘦身最佳实践
原文链接:www.jianshu.com Android本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. ...
- Android Apk瘦身指南大全
Android Apk瘦身指南大全 前言 为什么Android应用Apk要瘦身?虽然安装包大小对应用使用没有影响,但应用的安装包越大,用户下载的门槛越高,安装等待时间也会越长,特别是在移动网络情况下, ...
- APK瘦身-是时候给App进行减负了
前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装.前一段时间我司某一App进行APK的瘦身,最终也达到了减小10M的目标,现做一个简单的总结记录. ...
最新文章
- Android studio 真机联调闪退
- 错误处理:one of the variables needed for gradient computation has been modified by inplace operation
- matlab调用q外部exe文件,Matlab GUI调用外部程序生成exe,DOS窗口输入问题
- 兼容单片机的CRC32查表计算程序的C语言实现
- 能让你少写1000行代码的20个正则表达式
- 【状压DP】吃货JYY(luogu 6085)
- 安卓 图像清晰度识别_智能车牌识别系统的常见故障和解决方法
- 运动世界校园显示服务器开小差,小学新生入学适应存在的问题及教育对策 ——以徐州市某小学为例...
- js字符串string转object对象 - 方法篇
- TCP校验值的伪头以及校验值计算
- webgl漫反射公式物理原理猜测
- 进击的Libra:路在何方?中国应如何应对?
- EDK II Module Writers Guide上
- Python:Wilcoxon signed-rank test
- 《机器学习基础》学习笔记-1
- 数据在计算机中存储形式
- ORACLE数据库报错ORA-01034
- 【转载】网站关闭了域名备案信息是否需要注销,答案是一定要记得注销域名备案信息,防止域名过期后被他人注册用于非法用途而带来不必要的麻烦...
- 机器学习笔记~五种常见的聚类算法简介
- C语言学习第一步——软件下载VS, VC, VS code