首先声明一点:
aab是开发者上传至应用市场的应用包格式,不是手机解析安装的格式目的是为了用户用更少流量下载到机型匹配的apk包,同时开发者也能更放心的使用多abi架构的so库,不用担心so兼容对apk大小的影响很多媒体带节奏发新闻说aab是代替apk格式,目的是针对华为或者国内手机厂商,纯属扯淡,简直离离原上谱如果我没记错的话,早在18年Google就已经提出了aab这个东西
那么对于这次提到的Android APP Bundle直接带来的好处也是清晰明了的,我直接给撸过来了:
Android App Bundle:
- Google Play 使用 app bundle 生成和优化 APK,以便针对不同的设备配置和语言进行分发。这使您的应用程序更小(平均比通用 APK 小 15%)且下载速度更快,从而导致更多安装和更少卸载。
Play App Signing:
- Play App Signing 是应用程序包所必需的,它通过使用 Google 的安全基础架构来保护您的应用签名密钥免遭丢失,并提供升级到新的、加密强度更高的应用签名密钥的选项。
Play Feature Delivery:
- 超过 10% 的顶级应用使用 app bundle,Play Feature Delivery 使您能够自定义将哪些功能模块交付到哪个设备以及何时交付,以及安装时、有条件和按需交付模式。
Play Assets交付:
- 通过动态交付大型资产,同时降低交付成本,减少用户等待时间。使用 Play Asset Delivery 的游戏可以使用纹理压缩格式定位,因此您的用户只会获得适合其设备的资产,而不会浪费空间或带宽。
未来计划:
- 很快,Play App Signing 将开始推出APK Signature Scheme v4以选择应用程序,使他们可以选择访问新设备上即将推出的性能功能。收看7 月 12 日举行的Google for Games 开发者峰会,了解更多信息。
根据Google官方的说法,平均减少应用包体积15%。然而,对于使用大量so库的应用来说,这个数字可能过于保守。根据我的实际测试,在so库占用apk总体积53.8%的情况下,aab格式相较于apk格式分发下载直接减小了25%。仅从这一点来看,aab格式已经具备相当吸引力。
二、.aab的本质
.aab
实际上和.apk
一样是个压缩包,你可以直接改后缀为.zip
然后解压,解压后有如下目录:
其中base里是一些主要资源,.pb的文件是一些描述,如下:
aab文件将语言、分辨率、CPU架构、图片尺寸等拆分成N个.apk
,例如下,可以看到有87个apk文件
再根据设备软硬件情况组合成一个size小很多的apk进行安装。比如在google play上,aab会被打成N个apk再组合分发到对应的设备上。
具体描述,推荐看下这位老哥的相关博客
三、.aab如何安装到手机上
无法直接将.aab
文件安装到设备上,需要使用工具命令将其转换为.apks
格式,并通过工具命令将多个apk组合部署到设备上(此过程由工具根据adb连接的设备自动完成)。要操作.aab
文件,需先下载官方提供的bundletool
工具。
- 转aab为apks命令:
build-apks
// --bundle为输入文件的全路径(当前目录直接使用文件名) --output为输出文件全路径bundletool build-apks --bundle=my.aab --output=my.apks
直接使用如上命令应该是会报错找不到命令的command not found: bundletool
,正确执行jar文件方式是到bundletool.jar的文件夹下或者使用全路径
以下是在项目目录下运行的命令,该过程需要签名文件和相关参数。默认情况下,它将以未二次签名的debug版本进行处理。接下来将介绍如何使用带参数转换aab: ``` java -jar bundletool-xxx.jar build-apks --bundle=my.aab --output=my.apks ``` 请注意,在项目目录中执行此命令才有效。
- 安装命令:
install-apks
java -jar bundletool-xxx.jar build-apks --bundle=myapp.aab请注意:以下命令因带换行格式无法直接使用 ``` bundletool build-apks --bundle=my_app.aab --output=my_app.apks –ks=/MyApp/keystore.jks –ks-pass=file:/MyApp/keystore.pwd –ks-key-alias=MyKeyAlias –key-pass=file:/MyApp/key.pwd ```
-ks:签名文件的完整路径。 -ks-pass:签名文件密码,可以使用
pass:xxx
指定明文密码,也可以使用file:xxx
指定文件密码。 -ks-key-alias:签名别名。 -key-pass:签名密码,可以使用pass:xxx
指定明文密码,也可以使用file:xxx
指定文件密码。
- 从现有的 APK 集中提取设备专用 APK:
extract-apks
请注意:以下命令因带换行格式无法直接使用 ```shell bundletool extract-apks --apks=/MyApp/my_existing_APK_set.apks --output-dir=/MyApp/my_pixel2_APK_set.apks --device-spec=/MyApp/bundletool/pixel2.json ```这里展示一下手动创建的参数格式,json文件可以通过手动创建或者根据已连接的adb设备自动创建。
{ "supportedAbis": ["arm64-v8a", "armeabi-v7a"], "supportedLocales": ["en", "fr"], "screenDensity": 640, "sdkVersion": 27}
- 预估打包成aab格式后下载文件的大小:
get-size
java -jar bundletool-xxx.jar get-size total --apks=my.apks
更多命令的用法可查看 bundletool官方文档。
四、打包发布流程
- 工具栏中选择进行应用签名
- 选择Android APP Bundle --> Next
- 填写签名信息 --> Next
Export encrypted key for enrolling published apps in google play app signing,不需要的可以取消勾选- 选择想要的版本和文件输出路径 --> Finish
至此,整个aab打包就完成了,产出后的.aab文件可以直接上传到google play控制台的版本发布,发布后再次从play store下载到的就是新组合的apk,下载大小会有明显变化。上架play store还在使用apk的同学赶紧动起来吧!
还木有评论哦,快来抢沙发吧~