谷歌弃用APK包格式,转而使用AAB格式

2022-11-30 15:59:11 浏览数 (3)

近日,谷歌官方宣布:自 2021 年 8 月起,Google Play 将要求开发者以 Android App Bundle (以下简称 AAB)格式发布新应用,该格式将取代 APK 成为标准的Android应用发布格式。

一直以来,Android 首选的应用程序包就是 APK。APK 是 Android Package 的缩写,即Android 安装包,是一个碗基于 ZIP格式的压缩包文件,里面包含应用代码、图片、音频和开发者生成的应用签名密钥等大量资源。在制作APK包的时候,通过Android SDK 提供的打包工具打包成一个 Android 系统支持的安装程序文件,几乎所有 Android 应用程序都使用这种格式发布。

1, 为何要从 APK 转变为 AAB

一直以来,Android 首选的应用程序包就是 APK,那为什么Android要将安装包的格式从APK转变为AAB呢?有人说是为了应对鸿蒙。在我看来,其实不然,官方之所以这么做,其实是为了降低APK大小的一种手段。

总所周知,一个APK中往往包含应用代码、图片、音频和开发者生成的应用签名密钥等大量资源。不仅如此,为了兼容更多的设备,一个APK还需适配不同的屏幕密度(320dpi、480dpi 等)、处理器(ARM、ARM64、x86等等。但在这种情况下,应用开发者便承受太多:不仅要开发应用,还要管理许多 APK 以支持大量设备。

因此为了省时省力,大多数开发者都会选择构建一个通用 APK,即包含语言包、代码等在内的所有资源。不论用户身处何处、使用何种规格的设备,只需下载这个通用 APK 即可,这就造成APK包大的问题。为了解决这个问题,谷歌在 2018 年 Google I/O 大会上推出了 AAB 格式,希望以此减少开发者的负担,同时也有助于减少应用大小、安装时间和带宽消耗,提高用户体验。

所以说,AAB 格式其实并不是一个全新的应用安装包,而是一套软件的包管理方案,我们可以将它当做一个容器,里面包含着一个基本 APK 和多个用于特定配置的 APK。给予这一机制,很多公司在最近两年都用它实现了插件化和动态化下发的功能,参考文档:Android App Bundle。

因此,一旦开发者选择使用 AAB 格式发布应用,谷歌就会根据用户的设备配置从中生成优化后的 APK 提供给用户。对用户而言,这样的 APK 体积小、安装快,对开发者来说也省事:不必再为各种设备管理一大堆 APK。

AAB 的优势与特点

相较于传统的APK方式,AAB 有哪些优点呢?首先,便是上文所提到的应用体积缩小。据谷歌官方介绍,使用 AAB 生成优化的 APK 体积平均会比一般的 APK 小 15%,而这一数据会根据应用大小有较大起伏。例如 Airbnb 在从 APK 切换到 AAB 格式后应用大小减少了 22%,而 Netflix 更是减少了 57%。

其次,AAB 的 Play Feature Delivery 功能可自定义将哪些功能模块交付给哪个设备,支持安装时交付、按条件交付和按需交付等三种模式。这也就是将应用的功能拆分开来,以此大幅缩短用户下载应用的时间,其中没用的功能用户可以不下载或等到以后需要时再下载。

还有一个 Play Asset Delivery 功能,以动态方式交付大型资源可以减少用户等待时间,同时缩减交付成本。即使用 Play Asset Delivery 的游戏可通过纹理压缩格式作为交付条件,以便用户只获取适合其设备的资源,避免浪费空间或带宽。

如何打AAB包

和APK包的制作流程一样,我们也可以使用Android Studio进行AAB包的制作。首先,选择Android Studio工具栏【build】->【generate singed bundle apk】,如下图。

最后打包完成,会生成一个xxx.aab的文件,如下图:

AAB转APK

虽然从结果看来,以 AAB 格式分发新应用对开发者和用户都有益处,但还是有部分人对此有些担忧。比如,有人就担心因为 AAB 不能在 Google Play 以外的地方下载,会对如亚马逊应用商店等第三方应用商店造成很大影响。为此,谷歌已经开发了一个名为 bundletool 的开源工具,允许开发人员从 AAB 包中创建 APK,因此想在第三方商店中发布 Android 应用程序的开发人员可以手动导出其应用的 APK 版本。转化的命名如下:

代码语言:javascript复制
abb转apk
java -jar bundletool-all-1.7.0.jar build-apks --bundle=app.aab --output=finalapp.apks --ks=onlinetv.jks --ks-pass=pass:123456 --ks-key-alias=onlinetv --key-pass=pass:123456

安装
java -jar bundletool-all-1.7.0.jar install-apks --apks=finalapp.apks

0 人点赞