自2021年8月开始,GooglePlay商店要求开发者使用AAB来发布新应用。自打2018年5月谷歌官方推出AAB,已经过去了3个年头。
介绍
AAB,即Android App Bundle,可以把它理解成是新一代的APK。相比于APK,它的优点是可以进一步减小安装包的大小。
举个例子,如果项目了引用了native库,那么一般都会有多个so库文件,每个库文件对应一种abi架构。
当使用apk安装时,需要把所有so文件打到apk文件里,移动端下载该apk文件来安装程序;
当使用aab安装时,会根据移动端的架构选择出对应的库文件,以及其他资源和代码,打到apk文件里,移动端下载该apk文件来安装程序,这样就不需要下载其他用不上的库文件,下载的文件小,省时间又省流量,用户体验好,所有官方主推这种格式。
可以看到,中间有个过程,根据请求安装的客户端来生成对应的apk安装包,这件事就是Goolge Play商店在做。目前,不是所有的应用商店都支持了这个操作,只能在支持的应用商店上使用aab分发应用,不支持的依然要用apk格式的文件。
分割维度
根据官方文档介绍,点击查看,支持3个维度的分割:语言、分辨率和架构
1 | android { |
生成aab文件
Gradle任务中,有配置好的task,bundleDebug、bundleRelease,执行对应的task就可以生成aab文件。
严格来讲,aab文件并不是安装包,在生成的时候并不知道目标设备的信息,所以只能算是一堆零件,可以按需组装。
bundletool
谷歌官方介绍 官方项目地址
这是个专门用来操作aab文件的工具,可在项目里直接下载jar包使用,也可以通过brew install bundletool
安装。
这个工具可以通过aab文件生成apks、将apks安装到手机,还有几个不常用的功能,可以看项目里的介绍。
生成设备规范的JSON文件
1
bundletool get-device-spec --output=/tmp/device-spec.json
这个命令可以生成当前连接设备的规范文件,也就是参数信息文件。也可以手动创建,格式如下:
1
2
3
4
5
6{
"supportedAbis": ["arm64-v8a", "armeabi-v7a"],
"supportedLocales": ["en", "fr"],
"screenDensity": 640,
"sdkVersion": 27
}生成apks
1
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
此外还可以通过
ks
,ks-pass
,ks-key-alias
,key-pass
四个参数来指定签名,如果不指定则使用缺省的签名文件
这个apks是针对所有设备,加上--connected-device
数可生成只针对当前连接的设备,多个设备时使用--device-id=serial-id
,也可以使用--device-spec=xxx.json
通过JSON文件来限定。
为什么是apks呢,因为这真的就是多个apk。把.apks改成.zip后解压缩,就会看到里面有很多apk文件,包括基本的apk,以及按维度分割的apk。安装apks到设备
1
bundletool install-apks --apks=xxx.apks
可以再检查一下都安装了哪几个apk文件:
1
2
3adb shell pm path your.app.package.name
package:/data/app/your.app.package.name-_cJc4OrWZxYQCwC4AaWAtw==/base.apk
package:/data/app/your.app.package.name-_cJc4OrWZxYQCwC4AaWAtw==/split_config.arm64_v8a.apk可以看到,安装了一个基本的base.apk,以及一个对应abi的apk。想查询设备上其他app时,可以通过这个命令来查询包名:
1
adb shell pm list package | grep key-word
其他命令
- 抽取apks的子集
1
2
3
4bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json - 获取下载的大小
1
bundletool get-size total --apks=/MyApp/my_app.apks
总结
国内一般都是无线网来下载、安装,但老外们使用流量的却不在少数,所以如果能减少安装包的大小,对于提高CVR还是有一定帮助的。