Android 打包AAB+PAD(Unity篇)(上)

简介: AABPlay Asset Delivery分发模式资源更新纹理压缩格式定位应用版本更新下载大小上限针对 Unity 构建使用 UI 配置 AssetBundles使用 API 配置资产包

AAB


       Android App Bundle 是 Android 新推出的一种官方发布格式,可让你以更高效的方式开发和发布应用。借助 Android App Bundle,你可以更轻松地以更小的应用提供优质的使用体验,从而提升安装成功率并减少卸载量。转换过程轻松便捷。你无需重构代码即可开始获享较小应用的优势。改用这种格式后,你可以体验模块化应用开发和可自定义功能交付,并从中受益。


Play Asset Delivery


       Play Asset Delivery (PAD) 将 app bundle 的优势带到游戏中。它允许超过 150 MB 的游戏替换旧版扩展文件 (OBB),方法是将包含游戏所需的所有资源的单个工件发布到 Play。PAD 提供了灵活的分发模式、自动更新、压缩和增量修补功能,并且可免费使用。使用 PAD,所有资源包均在 Google Play 上托管和提供,因此你无需使用内容分发网络 (CDN) 向玩家提供游戏资源。


       Play Asset Delivery 使用资源包,资源包由资源(如纹理、着色器和声音)组成,但不包含可执行代码。通过 Dynamic Delivery,你可以按照以下三种分发模式自定义如何以及何时将各个资源包下载到设备上:「安装时分发」、「快速跟进式分发」和「按需分发」。


微信图片_20220521151316.png


分发模式


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


      「fast-follow」 资源包会在用户安装应用后立即自动下载;用户无需打开应用即可开始 fast-follow 下载。此类下载不会阻止用户访问应用。这些资源包会增加 Google Play 商店上列出的应用大小。


      「on-demand」 资源包会在应用运行时下载。


       Google Play 商店会以归档文件(而非拆分 APK)的形式提供配置为 fast-follow 和 on-demand 的资源包。这些资源包随后会在应用的内部存储空间中展开。您可以使用 Play Core API 查询以这种方式提供的资源包的位置。应用无法假设这些文件的存在或其位置,因为它们可能会被用户删除,或由 Play Core SDK 在游戏会话之间移动。尽管这些文件可由应用写入,您也应将其视为只读文件,因为资源包补丁程序依赖于这些文件的完整性。


资源更新


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


对于 「fast-follow」 和 「on-demand」 Asset Pack 的应用更新,则遵循以下步骤:


  • 1、系统将应用的补丁程序(包括所有资产)下载到设备上的安全位置。


  • 2、更新应用二进制文件;这包括所有 install-time Asset Pack。


  • 3、之前下载的所有 Asset Pack 变为无效。


  • 4、将资产的补丁程序复制并应用到存储在应用内部存储空间中的资产。


       在大多数情况下,当用户打开游戏时,整体更新已完成,用户可以立即开始玩更新后的版本。在极少数情况下,当用户打开应用时,应用二进制文件可能已完成更新,但资产的补丁程序应用过程尚未完成,因此用户尚无法访问这些资产。为了应对此类情形,您需要针对这些资产提供相应的“正在更新”界面元素,或构建逻辑来处理尚无法访问的无效资源。由于只有在所有 Asset Pack 类型均已下载后,应用二进制文件才会更新,因此补丁程序的应用操作会在本地以离线方式进行,且应快速完成。


纹理压缩格式定位


       纹理压缩是一种有损图像压缩,可让 GPU 使用专用硬件直接从压缩纹理进行渲染,从而减少所需的纹理内存和内存带宽用量。借助纹理压缩格式定位功能,您可以在 Android App Bundle 中添加使用多种纹理压缩格式压缩的纹理,并且依靠 Google Play 自动为每种设备提供采用最佳纹理压缩格式的资源。


应用版本更新


       新版本的应用上传到 Google Play 后,如果用户未在设备上更新该应用,他们可以打开之前的应用版本。在这种情况下,如有必要,应用可以通过调用 In-App Updates API 选择强制更新或建议更新。借助此 API,您可以从应用内触发更新,而不是让用户从 Google Play 商店触发更新。


下载大小上限


Asset Pack 因具有较高的大小上限而成为大型游戏的理想之选:


  • 1、每个 fast-follow 和 on-demand Asset Pack 的下载大小上限为 512 MB。


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


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


  • 4、一个 Android App Bundle 中最多可以使用 50 个资源包。


如果你使用的是纹理压缩格式定位,那么这些下载限制会分别应用于每个独一无二的纹理格式。


针对 Unity 构建


       Unity AssetBundle 文件包含可在应用程序运行时由 Unity 引擎加载的序列化资产。这些文件是特定于平台的(例如,为 Android 构建)并且可以与资产包结合使用。最常见的是, 「一个 AssetBundle 文件被打包成一个资产包」,该包使用与 AssetBundle 相同的名称。


  • 1、获取 Play Asset Delivery 的 Unity 插件(或包)。


      「注意:」 Google Play 核心库的下载和使用受Play 核心软件开发工具包服务条款的约束。下载和使用 Google Play 核心库,「即表示你同意 Play 核心软件开发工具包服务条款」。


       Unity 插件可用于精选的 Play 核心 API,包括 Play Asset Delivery。从 Google Play Plugins for Unity 版本 下载最新版本。这是一个包含 Play Core 插件以及其他 Play 插件(例如 Play In-app Billing 和 Play Instant)的单一软件包。


2、在 Unity 中创建 AssetBundles。


      「注意:」 你可以使用 Unity AssetBundle Browser 在你的 Unity 项目中创建和管理 AssetBundle。


使用 UI 配置 AssetBundles


  • 1、在资产包中配置每个 AssetBundle:


  • 选择Google > Android App Bundle > Asset Delivery设置。


  • 要选择直接包含 AssetBundle 文件的文件夹,请单击添加文件夹。


微信图片_20220521152403.png


  • 2、对于每个捆绑包,将Asset Delivery更改为「Install Time」、「Fast Follow」或「On Demand」。解决任何错误或依赖项并关闭窗口。


微信图片_20220521152522.png



  • 3、选择Google > Build Android App Bundle以构建应用程序包。


  • 4、(可选)配置你的应用程序包以支持不同的纹理压缩格式。


  • 常见的纹理压缩格式:


  • DDS 或 S3TC:有时称为 DXTC 或 DXTn。OpenGL 支持此格式的三种形式。


  • ETC1:大多数设备都支持此格式。这种格式不支持透明度,但游戏可将第二个纹理文件用于 Alpha 通道组件。


  • ETC2:支持 GLES3 的所有设备均支持此格式。


  • PVRTC:iOS 游戏常用的格式,在某些 Android 设备上也受支持。


  • ASTC:专为取代之前的格式而设计的新格式。比先前的格式更加灵活,因为它支持各种块大小。使用这种格式可以帮助您优化游戏大小。


       支持的格式及支持相应格式设备所占的百分比:


微信图片_20220521152556.png


使用 API 配置资产包


       你可以通过编辑器脚本配置资产交付,这些脚本可以作为自动构建系统的一部分运行。


       使用 AssetPackConfig 该类来定义要包含在 Android App Bundle 构建中的资产,以及模式。这些资产包不需要包含 AssetBundle。


public void ConfigureAssetPacks {
   // Creates an AssetPackConfig with a single asset pack, named
   // examplePackName, containing all the files in path/to/exampleFolder.
   var assetPackConfig = new AssetPackConfig();
   assetPackConfig.AddAssetsFolder("examplePackName",
                                   "path/to/exampleFolder",
                                   AssetPackDeliveryMode.OnDemand);
   // Configures the build system to use the newly created assetPackConfig when
   // calling Google > Build and Run or Google > Build Android App Bundle.
   AssetPackConfigSerializer.SaveConfig(assetPackConfig);
   // Alternatively, use BundleTool.BuildBundle to build an App Bundle from script.
   BuildBundle(new buildPlayerOptions(), assetPackConfig);
}


  你还可以使用类中的静态 BuildBundle 方法Bundletool生成带有资产包的 Android App Bundle,给定 「BuildPlayerOptions」「AssetPackConfig」


微信图片_20220521152700.png

相关文章
|
9月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
866 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
604 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
安全 Java Android开发
05. 【Android教程】Android 程序签名打包
05. 【Android教程】Android 程序签名打包
359 1
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
637 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1864 11
|
存储 算法 API
Unity打包AB包
在 Unity 中,AssetBundle(AB 包)用于存储和管理游戏资源,支持动态加载。开发者需为资源标记 AssetBundle 名称,Unity 会自动处理依赖关系并进行序列化。资源被打包成二进制格式,并可选择压缩算法(如 LZMA 或 LZ4)。通过 BuildPipeline API 可控制打包过程,包括设置目标平台(如 WebGL、PC)。示例代码展示了如何使用 BuildPipeline.BuildAssetBundles 方法打包 AB 包并输出到 StreamingAssets 文件夹中。
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
2246 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
图形学 Android开发 iOS开发
穿越数字洪流,揭秘Unity3d中的视频魔法!Windows、Android和iOS如何征服RTSP与RTMP的终极指南!
【8月更文挑战第15天】在数字媒体的海洋中,实时视频流是连接世界的桥梁。对于那些渴望在Unity3d中搭建这座桥梁的开发者来说,本文将揭示如何在Windows、Android和iOS平台上征服RTSP与RTMP的秘密。我们将深入探讨这两种协议的特性,以及在不同平台上实现流畅播放的技巧。无论你是追求稳定性的RTSP拥趸,还是低延迟的RTMP忠实粉丝,这里都有你需要的答案。让我们一起穿越数字洪流,探索Unity3d中视频魔法的世界吧!
581 2
|
Java 网络安全 开发工具
UNITY与安卓⭐一、Android Studio初始设置
UNITY与安卓⭐一、Android Studio初始设置
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件

热门文章

最新文章