Android App Bundles 技术分析

一、前言

在 Android 平台上,APK 瘦身方面的优化手段其实不多,无非压缩资源、删除无用资源、代码混淆、在线资源库、插件化等,实际上只是一些裁裁剪剪,并没有从根本上解决安装包过大的问题。

但今年的 Google I/O大会上,Google 向 Android 引入了新 App 动态化框架(即 Android App Bundle,缩写为 AAB),AAB 是借助 Split Apk 完成动态加载,使用 AAB 动态下发方式,可以大幅度减少应用体积。

事实上,一开始接触到 App Bundles 这种机制,看 Googl e自已介绍,尤其是了解到它存在的限制,比如需要加入谷歌的测试计划,版本限制(5.0以上),需要在谷歌商店的 Play Console(应用控制台)注册自己的 APP,只能通过 Google Play 发布等,仅此一条就注定在国内流行不起来,因为国内的用户很少能使用 Google Play下载应用。

但 AAB 技术对于Android开发者而言从来都是不免疫,我们还是有必要了解技术点,以应对中国如此蓬勃的 Android 生态。

二、AAB 介绍

Android App Bundle 是一种新的应用编译、上传、发布形式,它包括了开发者应用中所有编译过的代码、资源(例如图片、语言、字符串资源等)、屏幕大小、硬件架构等等。使用此种格式发布的应用,用户在应用商店看到的包的大小精简到极致。App Bundle 需要配合 Dynamic Delivery(动态交付)一起使用。

三、ABB 特点

在 Android Studio 中构建一个应用 ( app bundle),就可以将应用所需的全部内容 (适用于所有设备) 都涵盖在内:所有语言、所有设备屏幕大小、所有硬件架构。它本身并不支持动态化,只是动态化的一个载体文件,真正实现逻辑并不是它。

3.1 Split APKs

多 APK 支持以下类型屏幕密度 ABI,使用新的拆分机制,构建同一个应用程序的 hdpi 版本和 mdpi 版本,能够共享很多的任务 (如 javac,dx,proguard)。此外,它会被认为是一个单一的 variant,并且同一个测试程序将会被用来测试每个多 APK。

3.2 Dynamic Feature Module

这个概念感觉像是游戏里面到某个新地图才开始下载那样,不是一来就把所有资源都下载下来。这样显得 APK 更小了,而且就像游戏逻辑一样,高级副本的地图新手没机会进入,就不必要下载这部分内容,有的用户可能很久都不会用到部分功能,就可以放在 dynamic feature module,等要用的时候再下载。

3.3 AAB 的优点

  • Size 更小
  • 安装更快
  • 支持动态发布

3.4 AAB 的缺点

  • 仅限于通过 Google Play 发布的应用( Google 进一步巩固自身生态)
  • 需要加入到 Google 的 beta program
  • 最低支持版本 Android 5.0 (API level 21)
  • 低于 Android 5.0 (API level 21) 的版本 GooglePlay 会优化 Size,但不支持动态交付

四、APK 发布流程

比如,一个英语国家,谷歌手机 Pixel 2L的使用者,仅仅需要下载基础代码,xxxhdpi 的资源,en 的语言包,arm64 硬件架构等,而不再需要其他不必要资源。

普通的 APK 发布流程:

使用 App Bundle + Dynamic Delivery 的应用发布流程:

五、总结

Android App Bundle:提供一种全新编译产物格式文件 aab,使用 Android Studio 提供的 App Bundle 即可。


Refer

Android App Bundles