目录

前言

变化

参考文档

出包

  • 打包方式
  • PAD资源处理
  • 本地安装
  • 注意事项
  • 首次上传GooglePlay注意事项

前言

由于Google Play的规定, 2021 年 8 月起,所有的应用都只能以AAB的格式进行提交。最近对这方面进行了一些研究,总结了一些心得体会。

变化

区别于之前的Apk + Obb的分发模式,现在变更为了AAB + PAD的分发模式。相较于之前的obb,玩家直接从商店下载的包体大小直接减少了1G内容。因此,如果是旧项目的迁移,则需要做好对包体的控制。

obb文件之前有2G大小的限制,apk文件是100mb。但是这里的100mb不是纯粹的文件大小,而是指玩家下载到的apk大小。你所上传的apk,如果同时支持v7和v8,那么超过一些也是可以的。

aab则是有200mb的限制(原为150mb,提升过一次),比apk提升了100mb。

PAD的分发模式和之前obb类似,但是由于开发成本的问题,导致一般只使用了install-time这一种类型的Asset Pack。这种类型有1G大小的限制,因此我们几乎可以确定,新的Google Play游戏最大可以上传200Mb的aab和1G的PAD。

令人困扰的是,GooglePlay的文档描述的很笼统,让人以为PAD的内容是和aab是分开的。实际上,它们是压在同一个aab中的。在观察大小时,你需要观察PAD部分内容的压缩率和压缩后大小,保证其不超过1GB。

参考文档

AAB文档:https://developer.android.com/guide/app-bundle?hl=zh-cn PAD文档:https://developer.android.com/guide/playcore/asset-delivery?hl=zh-cn

出包

这里使用Unity导出AS工程,在AS工程中处理打包的方式。

不同版本Unity对于AAB的支持不尽相同。而且,对于哪些资源应该分入PAD中,Unity操作起来比较困难。因此推荐使用导出AS工程再打包的方式。

打包方式

打包方式类似于apk,在Android Studio的菜单栏中选择Generate Signed Bundle or APK,选择第一个选项Android App Bundle即可。

unity2022 调用aar包 unity打包aab_unity2022 调用aar包

PAD资源处理

Unity直接导出的资源,都在unityLibrary中,你需要将启动非必要的,多余的资源移动到PAD中去,完成打包。

首先需要创建install-time类型的PAD。

  1. 右键项目根目录,New -> Module -> Android Library
  2. 输入名称 install_time_asset_pack
  3. 包名可以选择你项目的包名,也可以不用管。点击Finish完成创建。

然后,将install_time_asset_pack中的Java文件删除(如果有的话)

修改install_time_asset_pack的gradle内容为:

apply plugin: 'com.android.asset-pack'


assetPack{
    packName = "install_time_asset_pack"
    dynamicDelivery{
        deliveryType = "install-time"  //安装时进行PAD资源分发
    }
}

在项目的setting.gradle中增加包的引用:

注意,不能少了冒号

include ':install_time_asset_pack'

在项目的gradle文件中引用:

在项目gradle文件的android层级中,增加一行:

assetPacks = [":install_time_asset_pack"]

完成以上设置,将资源转移到install_time_asset_pack的src/man/assets中去。

其中的资源,根据你项目资源的压缩率,大概可以保持在1.1G左右,以控制到打包后压缩大小为1G为准。

本地安装

打出的aab,可以使用bundletool转换为apk,供测试使用。

Bpktool的Github路径为:

https://github.com/google/bundletool

使用以下命令,可以将aab转换为apks文件:

java -jar bundletool-all-1.15.5.jar build-apks --bundle=launcher-release.aab --output=temp.apks --ks=keystoreks --ks-pass=pass:keystorepass --ks-key-alias=keystorealias --key-pass=pass:keystorekeypass --mode=universal

一定要加上universal参数,否则会转换成多个apk,有些模拟器不支持安装,也不便于传输。

正确执行后,会生成一个apks文件。将apks文件解压,即可获得apk文件。

注意事项

aab文件上传到GooglePlay之后,玩家获取到的应用仍然是apk格式,这是谷歌分发的结果。

而且,会根据不同平台,存在多个apk包的情况。因此,依赖于热更il2cpp,构建虚拟apk的热更方式将会失效。

这里推荐使用其他的热更方式,或者修改il2cpp的热更代码。

热更代码,推荐将aab上传GooglePlay测试渠道,通过GooglePlay下载后再进行测试。

首次上传GooglePlay注意事项

在首次上传到GooglePlay的过程中,需要上传签名文件。但是签名文件的格式是要求pepk格式。

可以在打包时勾选导出并指定导出路径:

unity2022 调用aar包 unity打包aab_unity2022 调用aar包_02