游戏打包、内容更新和流式安装测试

此话题介绍了如何为流式安装创建包以进行本地迭代、性能验证、提交前测试和最终提交。 您将清晰了解在打包期间 MakePkg 工具运行的步骤以及建议在开发期间打包和流式安装测试使用的步骤。

简介

MakePkg.exe 是一款将内容置于二进制打包文件的工具,被称为 Xbox 虚拟容器 (XVC)。 用于主机的 XVC 文件扩展名为 .xvc,用于电脑的 XVC 文件扩展名为 .msixvc。 除了扩展差异外,包名称中还添加了一个后缀以区分 Xbox One 系列包 (_x) 和 Xbox Series X|S 系列包 (_xs)。

MakePkg.exe 使用游戏的内容和映射文件作为输入来生成使用已知测试密钥、随机生成的密钥或用于加密的稳定密钥进行加密的包。 用于加密的密钥取决于将包用于本地测试还是提交给 Microsoft 进行发布,下方展示了详细用例。

贴图文件 中的 XML 有两种用途。 首先,它指定在运行时对游戏可用的文件的位置。 其次,它指定每个文件所属的区块文件。 始终在允许运行游戏前安装一组区块(也称为启动集)。 在运行游戏时安装其余区块。 提供 API 来查询区块安装的进度和修改尚未安装的区块的安装顺序。

本主题内容:

打包期间的步骤

MakePkg 打包过程可以细分为几个步骤。

MicrosoftGame.config 和文件存在验证

MakePkg 命令验证位于内容源目录中的 MicrosoftGame.config 文件是否有效,是否可成功安装。

运行 MakePkg pack 命令时,它确保 MicrosoftGame.config 内引用的文件位于源目录中并且经过验证以确保它们将打包为启动集。 这包括二进制文件、映像文件以及任何其他资源。

二进制签名

使用 Xbox 代码完整性 (XCI) 对游戏中的文件进行扫描和签名。 在文件中检测到的 PE 标头作为此过程的一部分被修改,之后将其写入包文件。 如果签名失败,会报告错误消息,以及提供一个命令来手动重新运行 xcihash.exe 以收集有关签名失败的更多详细信息。

包创建

MakePkg 完成预验证步骤后,立即创建包文件。 MakePkg 然后将源文件(包括签名的可执行文件)复制到 XML 映射文件所指定的区块中的包文件。

注意

仅限主机:包创建的最后一步涉及嵌入 GameOS 文件 (GameOS.xvd)。 此文件是 GDK 的一部分,必须位于游戏可执行文件旁边的布局目录中。 /gameos 标志用于指定 GameOS 文件的备用源位置。

加密

类型 测试签名 (/lt) 随机密钥 (/l) 稳定密钥 (/lk SECRET.LEKB)
增量上传
packageutil compare
安全上传
停止时程序包保护
旁加载至开发工具包上
旁加载至电脑上

测试签名(默认加密)

默认的 MakePkg 行为是创建经测试签名的包,但在调用 makepkg pack 且使用 /lt 开关时也会体现出来。 测试签名通过使用已知的测试加密密钥(用于性能测试验证)针对在 Xbox 和电脑上运行加密生成的包文件。 尽管实时包解密效果被设计为对于游戏是透明的,这可确保在认证和最终掌控游戏前发现任何可能与加密有关的性能问题。 测试签名的包不设计用于密码保护的内容,因为加密使用固定密钥。 使用 xbapp install 可以在开发工具包上安装测试签名的包,使用 wdapp install 可在开发电脑上安装测试签名的包。

随机密钥加密(/l 开关)

MakePkg /l 开关会使用随机生成的加密密钥来加密包文件。 除了游戏包之外,MakePkg /l 会生成一个名称采用 PackageFullName_licenseName_GUID.EKB 格式的文件。 (请注意下划线 (_) 字符的使用。) 使用 /l 开关创建的包不能安装在开发工具包或开发电脑上。 您应使用测试签名的包测试您的游戏,直到游戏通过所有检查和提交前测试。 达到该状态之后,在最终提交到 Microsoft 前带 /l 开关运行 MakePkg。

Makepkg /lk 开关用 makepkg genkey 命令提供的稳定(始终相同)密钥对包进行加密。 除了游戏包之外,MakePkg /lk 会生成一个名称采用 PackageFullName_licenseName_GUID.EKBPackageFullName_licenseName_GUID.CEKB 格式的文件。 (请注意下划线 (_) 字符的使用。) 使用 /lk 开关创建的包可以安装在开发工具包上,但不能安装在开发电脑上。 对于电脑,应使用测试签名的包测试您的游戏,直到游戏通过所有检查和提交前测试。

由于以下优点,这是用于开发工具包测试和提交的推荐加密模式:

  1. packageutil 比较可以生成正确的更新大小估计(与 /l 不同)。
  2. 它可以使用主机和电脑下载内容更新时所用的算法,将增量安全上传到合作伙伴中心。
  3. 可以将其安装到开发工具包上(与/ l不同)。
  4. 它使用安全的加密密钥材料,并且只能在特定的环境中解密(与 /lt 不同)。

/lt/l加密模式不同,/lk 模式需要一个额外的时间步才能使用:

  1. 一次:运行 makepkg genkey /ekb SECRET_KEY.lekb 以创建 SECRET_KEY.lekb 文件。 这是本地 EscrowEd Key Blob (LEKB),用于存储加密程序包的稳定内容密钥。 应该将其存储在需要知道访问权限的安全位置。 在理想的设置中,只有正式的生成计算机/帐户才可以访问它。
  2. 包创建:运行 makepkg pack /lk SECRET_KEY.lekb ...。 这将创建一个使用存储在 SECRET_KEY.lekb 文件中的密钥加密程序包。
  3. 程序包上传:XVC 和 EKB 文件通常会上传到合作伙伴中心。 不上传 LEKB 和 CEKB 文件。

xbapp install 将自动安装将程序包加载到 ERA devkit 所需的 CEKB 文件。 如果要测试基于工具的安装方案(游戏光盘、外部存储、主机到主机转移)而非安装方案,则 xbapp 安装项 命令可用于仅安装 CEKB 文件。

警告

LEKB 文件的内容仅进行过轻微的混淆处理。 你有责任通过对 LEKB 文件进行访问保护来确保内容包的安全性。 任何通过 makepkg pack 处理 LEKB 文件和内容包文件输出的人员可解密其内容。

警告

CEKB 文件的内容允许将该包加载到任何活动的 ERA 开发工具包上。 有责任通过确保对 CEKB 文件的访问来确保内容包的安全性。 任何通过 makepkg pack 处理 CEKB 文件、活动的 ERA 开发工具包、内容包文件输出的人员,可在开发工具包上安装程序包、可启动程序包、并从程序包 xbcp 文件。

重要

2021 年 4 月 GDK 之前生成的 LEKB 文件将不会创建 CEKB 文件。 如要使用新的开发工具旁加载功能,必须使用 2021 年 4 月或更高版本的 GDK 工具重新创建 LEKB 文件。

提交验证

创建包后,MakePkg 将自动对游戏文件运行提交验证器 (SubmissionValidator.dll)。 提交验证器的目标是检查错误,这些错误和问题可导致游戏以后在 Microsoft 的引入、掌控或认证过程或将来的内容更新中出问题。 需要更正所有检测到的问题,之后才能生成签名的包以上传到合作伙伴中心。

提交验证过程将生成一个 XML 日志文件,其中详细说明所有失败的性质和位置。 此日志文件写入 MakePkg 的 /pd 参数为包文件输出指定的同一位置。 此日志可能包含失败或警告。 必须在向 Microsoft 提交包之前解决失败问题。 应针对警告考虑补救措施,以确保游戏遵守相关政策和 Xbox 要求 (XR) 指南。

将包上传到合作伙伴中心并发布到掌控过程时,再次进行验证检查。 这将确保使用提交验证器的最新版本检查游戏并尽早发现任何问题。

提交验证测试

提交验证测试 说明
外来文件 验证游戏不包含禁止的文件。 禁止的文件包括源文件和调试文件(例如,*.c、*.cpp、*.obj、*.lib、*.cs 和 .h)以及 Game OS 卷中包含的所有系统文件。
MicrosoftGame.config MakePkg 不执行以下配置检查:
  • 徽标和启动屏幕图像的分辨率和位深度
  • 检查包是否正确支持 mod(仅限电脑桌面)
二进制扫描扫描所有 .exe 和 .dll 文件以查找任何非零售版依赖项。 任何托管代码二进制文件会导致失败(仅主机)。 检测到的其他问题包括非 Xbox 可执行文件(仅主机)和 32 位可执行文件(仅主机)。

随着发现新问题,将在一段时间后推出特定测试。 通过提交验证器检查不应被视为在引入和认证过程中游戏提交不会出现其他问题。 这样做的目的只是为了减少可预见错误导致的拒绝时间和成本。 此外,尽管提交验证器可能检查某些与安全相关的问题,但它不应被视为游戏的安全测试。

您可以从 Xbox Game Developer (XGD) 站点下载最新版本的提交验证器。 由于工具的更新速度可能与 Xbox One 软件开发工具包版本更新的速度不同,确保您使用的是最新版本以避免提交过程中的任何验证失败导致的拒绝。 若要获取最新版本,请参阅 Xbox 开发人员下载->Xbox One->提交验证程序

有关提交验证器的详细信息,请参阅此 GDK 文档中的“提交验证器 (SubmissionValidator.dll)”。

有关验证过程的任何问题,请与开发者客户经理 (DAM) 联系。

要在开发期间创建包,我们建议执行以下步骤(在以电脑作为开发目标时,应使用 wdapp,而不是 xbapp)。

  1. 在开发电脑上使用测试签名的包和 xbapp install 进行本地迭代。
    MakePkg.exe pack /fMapfile/dLooseContentDir/pdOutputFolder
    若要开始,请参阅 流式安装(开发人员教育材料 > 所有 NDA 示例)
  2. 通过从 shell 启动或通过使用 xbapp launch 运行您的游戏。
    xbapp 安装local-XVC-pathxbapp 安装http-URI
    要测试流式安装的备用选项,请参阅本主题后面的测试流式安装包
  3. 通过在根文件夹中使用刻录到蓝光光盘的测试签名的包,测试从光盘 (ODD) 安装游戏。 将光盘插入 Xbox One 开发工具包后,运行以下命令。
    * xbapp 安装 XO:*XVC-file-name
  4. 通过使用与测试签名的包相同的打包命令,使用 /l 标志来准备您的最终提交。

测试流式安装包(电脑)

使用 wdapp 命令在测试电脑上安装包。

注意

目前,测试 MSIXVC 包必须存在于测试电脑或 Web 服务器的物理驱动器上。 在将来的更新中,将添加从通用命名约 (UNC) 共享进行的安装。

有关更详细信息,请参阅 面向电脑的包装入门

测试流式安装包(主机)

可使用四种方式来测试安装测试签名的流式安装包。

从开发电脑流式传输

从开发电脑流式传输不支持任何吞吐量限制。 安装速度依赖于开发电脑的处理器和 I/O 特征,以及开发电脑和开发工具包之间的网络连接带宽。 从新型开发电脑(具有几个机械硬盘)的千兆位以太网连接上,预计速度可达 300 Mbps(大约 36 MB/秒)或更高。

xbapp 安装dev-pc-path-to-XVC

在 Web 服务器上托管包

如果您的 Web 服务器支持配置带宽限制,则在 Web 服务器上托管包将允许模拟不同的网络交付速度。 Xbox One 平台处理连接故障和重试逻辑。 当从 Internet 源安装时您的游戏运行与从光盘安装一样(除了速度不同)。

xbapp 安装http-URI-to-package

将包刻录到光盘然后从命令行安装

刻录光盘,使 XVC 在根目录中然后使用以下命令来安装包。

xbapp 安装 XO:*xvc-file-name*

将包刻录到光盘然后通过 shell 安装

刻录光盘,其中名为 MSXC 的文件夹包含您的包。

将光盘插入正在运行的开发工具包。 shell 会自动开始安装您的游戏,且在安装了启动集、游戏可启动后开发工具包显示一条通知。

最佳做法

使用子文件内容更新

使用子文件的内容更新,这可以减小内容更新的规模。 创作您的包布局以确保在将来进行最佳内容更新。

有关创作包以实现最佳更新的更多信息,请参阅内容更新(NDA 主题)要求授权

Xbox 要求 034 (XR-034:流式安装初始播放标记)

包括初始玩家标记是可选的,强烈建议购买。 它允许用户在游戏完全安装之前运行游戏,同时在后台继续安装。 根据 XR-034:流式处理安装初始玩家标记,包含初始播放标记的游戏必须在从初始游戏标记启动时提供游戏体验。

测试你的游戏

从各种源、以不同速度安装游戏以测试它。

使用最新的提交验证器

始终使用最新版本的提交验证器。

Xbox 开发人员下载 - >Xbox One->提交验证程序提供最新版本的提交验证程序

资源和指南

您可能想要熟悉以下主题—文档中一些有用的跳转点。

另请参阅

MicrosoftGame.config
提交验证器 (SubmissionValidator.dll)
提交验证器质量测试