近日,谷歌官网发表:自 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 转 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