新姿势来啦 - Android App Bundle

ps: 我是 out 啦,更不上第一时间啦,这不才刚刚注意到 Google 新发布的 Android App Bundle,来张图压压惊


啥是 Android App Bundle

很好理解:Google 官方的插件化呗。Android App Bundle = Apk 动态打包,动态组件化的技术,与 Instant App 不同,AAB 是借助 Split Apk 完成动态加载,使用AAB动态下发方式,可以大幅度减少应用体积,总结下特性,就是2个:

  • 资源选择性加载
  • 动态下发 lib

资源选择性加载

怎么理解这个 资源选择性加载 呢,大家先个图:


android 因为要适配各种不同硬件和配置,我们有不同 dp 密度的图片文件,语言文件,不同指令集的 so 等,现在 Android App Bundle 来了可以优化这个问题,当然只限于 GooglePlay,在 google 市场我们下载 apk 时,市场先会检测我们手机的特性,然后选择最合适的资源打成 apk 再发给我们,比如我的手机只需要 arm-v7 的 so,hdpi 的图片,剩下的不会下发我们,这样可以大幅度减少 apk 的体积,尤其是对于 so 来说,一个高德地图,不同的 so 包加起来有小 10M 了,这比我们之前自己干的 apk 优化压缩可强多了,不愧是Google 大大,一出手就是神器,可惜啊,Google 服务国内用不了,不知道后续国内会不会跟进


动态下发库

这个可就是太 N 了,插件化实现的目标不就是解决动态性的问题吗,之前看 ios,google 封杀国内的插件化和热修复我还悲观了一阵,但是看到 Android App Bundle 后我们还是有些窃喜的,国内的也努力不是白费的,Google 这不就承认了国人的努力嘛

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 完成,而不是国内插件化技术的反射代理 hook, 想了解更多关于split apks的内容,请看 官方文档

另外一点 Android App Bundle 很像阿里的动态化容器框架 Quinox,Quinox 里每个动态部署的库也叫 Bundle,不说这块是不是有什么 PY 交易在里面呢,Quinox 目前没有开源,应该是阿里插件化 Atlas 的进化,详情请看:支付宝客户端架构解析:Android 容器化框架初探

需要 Android Studio 升级为 3.2 及其以上版本,以添加对 Dynamic Delivery 的支持,会把 base app 构建出构建成 .aab 文件



Android App Bundle 与 APK 不同,App Bundle 纯粹是为了上传文件而设计的,用户无法直接安装和使用它,.aab 只是一个 zip 文件,Google Play 从中生成优化的 APK 并将其提供给设备进行安装。可以考哪考哪 .abb 中的内容:


然后新的可动态部署的库会以 apk 的形式添加进来,具体请看 google 官方号:如何获得更小的应用文件尺寸?来了解下 Android App Bundle

你可能感兴趣的:(新姿势来啦 - Android App Bundle)