找回密码
 立即注册
查看: 409|回复: 0

【Unity 打包】Android App Bundle

[复制链接]
发表于 2022-4-5 13:43 | 显示全部楼层 |阅读模式
简介

从 2021 年 8 月起,新应用需要使用Android App Bundle才能在 Google Play 中发布。现在,Play Feature Delivery或Play Asset Delivery支持大小超过 150 MB 的新应用
Google Play 会使用您的 App Bundle 针对每种设备配置生成并提供经过优化的 APK,因此只会下载特定设备所需的代码和资源来运行您的应用。您不必再构建、签署和管理多个 APK 来优化对不同设备的支持,而用户也可以获得更小且更优化的下载文件包。
使用环境


Unity 版本:2018.4.36
包体资源

分发模式


谷歌为开发者提供了三种分发模式:

install-time:用户在 Google Play 平台上下载时包含的资源,应用启动后可以立即使用

fast-follow:资源包会在用户安装应用后立即自动下载,不需要用户打开应用,但需要判断是否下载完成

on-demand:资源包会在应用运行时下载
资源设置

针对 Unity 打包使用代码添加文件夹的方式进行设置
var assetPackConfig = new AssetPackConfig();

assetPackConfig.AddAssetsFolder("asset_base", "Assets/GoogleOutput", AssetPackDeliveryMode.InstallTime);
打包

针对 Unity 打包


1.Unity 导入 Google 提供的插件,可根据自己项目需求选择下载适合的插件包,本文只涉及 App Bundle 的构建,将使用 com.google.android.appbundle 和com.google.play.assetdelivery插件包。

适用于 Unity 的 Google Play 插件版本github.com/google/play-unity-plugins/releases

2.编写打包脚本
EditorUserBuildSettings.buildAppBundle = true;

EditorUserBuildSettings.exportAsGoogleAndroidProject = false;

var assetPackConfig = new AssetPackConfig();

assetPackConfig.AddAssetsFolder("asset_base", "Assets/GoogleOutput", AssetPackDeliveryMode.InstallTime);

Bundletool.BuildBundle(new BuildPlayerOptions() {

  target = BuildTarget.Android,

  targetGroup = BuildTargetGroup.Android,

  locationPathName = Path.Combine(Application.dataPath, "..", "Build/Android", "android-app-bundle.aab"),

    scenes = new[] {

      "Assets/Scenes/SampleScene.unity",

    },

  options = BuildOptions.None

}, assetPackConfig);
针对 Java 打包


1.针对 Java 打包需要我们导出 Android 工程,并进行一定配置后,使用 Gradle 构建 app bundle

2.编写打包脚本
EditorUserBuildSettings.buildAppBundle = false;

EditorUserBuildSettings.exportAsGoogleAndroidProject = true;

BuildPipeline.BuildPlayer(new[] {

  "Assets/Scenes/SampleScene.unity",

}, Path.Combine(Application.dataPath, "..", "Build/Android", "android-app-bundle"), BuildTarget.Android, BuildOptions.None);
3.导出后的工程目录如图:

Unity 导出 Android 工程目录

4.由于构建 App Bundle 需要 Gradle 插件版本在 4.0.0 以上,如果你的版本不满足需要自己去更新 Gralde 插件,并且需要将 build.gradle 配置文件中的 com.android.tools.build:gradle:x.x.x 改为你所使用的版本。

Android Gradle 插件版本说明 | Android 开发者 | Android Developersdeveloper.android.com/studio/releases/gradle-plugin?hl=zh-cn

Gradle | Releasesgradle.org/releases/

5.在根目录下创建文件夹来放你想要放进 aab 包体的资源,这里我们创建一个asset_base的文件夹

6.在 asset_base 目录下创建 build.gradle 文件,并进行配置
plugins {

id 'com.android.asset-pack'

}

assetPack {

  packName = "asset_base" // Directory name for the asset pack

  dynamicDelivery {

    deliveryType = "install-time" //分发模式

  }

}
7.在根目录的 build.grade 文件中配置你的资源包名称
// In the app build.gradle file:

android {

  ...

  assetPacks = [":asset-pack-name", ":asset-pack2-name"]

}
8.在根目录的 settings.gradle 文件中,配置你的资源包名称
include ':asset_base'
9.在 asset_base 下创建 src/main/assets 目录,在该目录下放入你的资源目录

10.在根目录下执行 gradle wrapper 命令,成功后可以在根目录下看到 gradle 文件夹

11.在根目录下执行 .\gradlew bundleRelease 命令,成功后可以在根目录下看到 build 文件,aab 文件就在该目录下
本地测试

1.由于 Android 手机并不能直接安装 .aab 文件,为了更快的上手测试,我们还需要将 .aab 转成 apks,在通过 bundletool 工具安装到手机上,其中 bundle-tool 也需要自己准备好。

Releases · google/bundletool (github.com)github.com/google/bundletool/releases

2.aab 装成 apks 文件
java -jar bundletool-all.jar build-apks --bundle=*.aab --output=*.apks
3.apks 安装到手机
java -jar bundletool-all-1.9.1.jar install-apks --apks=*.apks
工程项目

本文的项目工程已上传至 github,有需要的同学请自取。

tangslover/google-aab (github.com)github.com/tangslover/google-aab
参考文章

About Android App Bundles | Android Developersdeveloper.android.com/guide/app-bundle

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-17 02:53 , Processed in 0.091403 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表