近日,谷歌官网发表:自 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 版本。转化的命名如下:

abb转apkjava -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