前言
变化
参考文档
出包
- 打包方式
- 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即可。
PAD资源处理
Unity直接导出的资源,都在unityLibrary中,你需要将启动非必要的,多余的资源移动到PAD中去,完成打包。
首先需要创建install-time类型的PAD。
- 右键项目根目录,New -> Module -> Android Library
- 输入名称 install_time_asset_pack
- 包名可以选择你项目的包名,也可以不用管。点击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格式。
可以在打包时勾选导出并指定导出路径: