Android App瘦身新姿势——Android App Bundle

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012124438/article/details/83508944

由于博主长期从事海外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,这其实跟之前的插件化方案有异曲同工之处,而且天然支持友好,动态下发业务需求能有效的减少包大小,增加启动速度,减少安装时间等等。

猜你喜欢

转载自blog.csdn.net/u012124438/article/details/83508944