0%

Unity 构建 Android App Bundle

Google 要求从2021年下半年开始提交的新应用必须使用 Android App Bundle 来打包才能上 Google Play。超过 150MB 还必须使用 Play Asset Delivery (PAD) 的方式来代替之前的扩展文件 (*.obb) 方式。

Google 已经提供了针对 Unity 构建的方法,但是由于我们的项目打包比较特殊并且会生成 Android Studio 工程,所以采用了 针对原生代码或 Java 代码构建

资源包(Assets Pack)

在 PAD 文档中,需要将游戏中的资源分成资源包(Asset Pack)上传到 Google Play。资源包有多种分发模式:install-timefast-followon-demand 三种模式。

其中 install-time 有点类似与之前的 *.obb 模式,在安装好应用的同时将资源分发。只需要提交一个文件(.aab)即可,不需要提供 `.apk*.obb` 了。

install-time 资源包在用户安装应用时分发。这些资源包以拆分 APK(APK 集的一部分)的形式提供。它们也称为“预先”资源包;您可以在应用启动时立即使用这些资源包。这些资源包会增加 Google Play 商店上列出的应用大小。用户无法修改或删除这些资源包。

更新应用时,install-time Asset Pack 会作为基础应用更新的一部分进行更新(开发者无需执行任何操作)。

所有 install-time Asset Pack 的总下载大小上限为 1 GB。

一个 Android App Bundle 中的所有 Asset Pack 的总下载大小上限为 2 GB。

工程修改

  1. 导入 Play Core 库
1
2
3
4
5
dependencies {
// ...
implementation 'com.google.android.play:core:1.9.1' // 导入 Play Core 库
// ...
}
  1. 更新 Gradle 插件版本到 4.0.0 或更高。
1
2
3
4
5
6
7
buildscript {
// ...
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
}
// ...
}
  1. 在项目根目录中,为 Asset Pack 创建一个文件夹。例如:unityinstalltime
  2. 在 Asset Pack 目录中,创建 build.gradle 并添加:
1
2
3
4
5
6
7
8
9
// In the asset pack’s build.gradle file:
apply plugin: 'com.android.asset-pack'

assetPack {
packName = "unityinstalltime" // 文件夹名
dynamicDelivery {
deliveryType = "install-time" // 分发模式 "[ install-time | fast-follow | on-demand ]"
}
}
  1. 在项目的应用 build.gradle 文件中,添加每个 Asset Pack 的名称,如下:
1
2
3
4
5
// In the app build.gradle file:
android {
//...
assetPacks = [":unityinstalltime"]
}
  1. 在项目的 setting.gradle 文件中,添加 Asset Pack,如下:
1
2
3
// In the settings.gradle file:
include ':app'
include ':unityinstalltime'
  1. 在 Asset Pack 目录下,创建子目录 src/main/assets,例如下图:
  1. src/main/assets 中的内容剪切至 unityinstalltime/src/main/assets 目录中。例如下图:
  1. 完成。

构建

使用 Android Studio 的菜单 Build -> Build Bundle(s)/APK(s) -> Build Bundle(s) 来生成,或者使用 Gradle 构建 Android App Bundle。命令如下:

1
./gradlew bundleRelease

成功之后即可在项目的 build/outputs/bundle/release 目录下找到生成的 *.aab 文件。

aab 文件仍然是 zip 文件,可以解压缩打开,结构目录可以参考链接

例如我们生成的 aab 文件目录如下:

1
2
3
4
5
6
7
8
9
10
base
- dex // classes.dex
- lib // *.so
- manifest // AndroidManifest.xml
- res // drawable...
BUNDLE-METADATA
META-INF
unityinstalltime
- assets // 我们的资源
- manifest // AndroidManifest.xml

其中 base 文件夹和之前的 apk 差不多,assets 被移到了 unityinstalltime 里。

安装测试

生成的 aab 文件可以使用 bundletool 来安装到设备,或者上传至 Google Play 进行测试。bundletool 下载地址

安装步骤:

  1. 使用 bundletool 生成 apks 文件。这块 output 的文件名后缀必须为 apks
1
2
3
4
5
bundletool build-apks --bundle=Unity-AAB-Demo-release.aab --output=Unity-AAB-Demo-release.apks
--ks=mykeystore.jks # 签名文件
--ks-pass=password
--ks-key-alias=mykeyalias
--key-pass=password
  1. 将生成的 apks 文件安装到设备上。
1
bundletool install-apks --apks=Unity-AAB-Demo-release.apks

参考链接