资产包简介

重要

如果打算将应用提交到 Store,则需要联系 Windows 开发人员支持部门,并获得使用资产包的批准。

资产包是一种包的类型,充当应用程序通用文件的中心位置 - 有效消除整个体系结构包中重复文件的必要性。 资产包与资源包类似,因为它们都被设计为包含应用运行所需的静态内容,但不同之处在于,无论用户的体系结构、语言或显示规模如何,所有资产包都始终会被下载。

Asset Package Bundle Diagram

由于资产包包含所有体系结构、语言和规模无关文件,因此利用资产包可以缩小整体打包应用大小(因为这些文件不再重复),从而帮助你管理大型应用的本地开发磁盘空间使用情况,并对应用的包进行总体管理。

资产包会如何影响发布?

资产包最明显的优势是打包应用的大小减小。 较小的应用包通过让 Store 处理更少的文件,以加快应用的发布过程;但这不是资产包最重要的优势。

创建资产包时,可以指定是否应允许执行该包。 由于资产包应只包含与体系结构无关的文件,通常不包含任何 .dll 或 .exe 文件,因此资产包通常不需要执行。 此区别的重要性在于,在发布过程中,必须扫描所有可执行包,确保它们不包含恶意软件,并且对于较大的包来说,此扫描过程需要更长的时间。 但是,如果将包指定为不可执行,则应用的安装将确保无法执行该包中包含的文件。 这一保证消除了完整包扫描的需求,并且大幅减少了发布应用(以及更新应用)期间,扫描恶意软件所需的时间,从而显著加快资产包应用的发布速度。 请注意,扁平化捆绑包应用包也必须用于获取此发布权益,因为这是允许 Store 并行处理每个 .appx 或 .msix 包文件的内容。

我应使用资产包吗?

更新应用的文件结构以充分利用资产包,由此可以产生切实的好处:减少包大小和更精简的开发迭代。 如果体系结构包都包含大量共同文件,或者大部分应用由未执行的文件组成,则强烈建议你投入额外的时间来转换为使用资产包。

但应注意,资产包不是实现应用内容可选性的手段。 资产包文件是非可选的,无论目标设备的体系结构、语言或规模如何,始终都会被下载 - 对于你希望应用支持的任何可选内容,都应使用可选包来实现。

如何创建资产包

创建资产包的最简单方法是使用打包布局。 但是,也可以使用 MakeAppx.exe 来手动创建资产包。 要指定在资产包中要包括的文件,需要创建一个“映射文件”。 在此示例中,资产包中唯一的文件是“Video.mp4”,但所有资产包文件都应在此处列出。 请注意,资源包中省略 ResourceMetadata 中的 ResourceDimensions 说明符(与资源包的映射文件相比)。

[ResourceMetadata]
"ResourceId"        "Videos"

[Files]
"Video.mp4"         "Video.mp4"

使用这些命令之一,以使用 MakeAppx.exe 创建资产包(适用于 MSIX 和 .appx)。

MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.appx
MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.msix

这里需要注意的是,AppxManifest(徽标文件)中引用的所有文件都不能移动到资产包 - 这些文件必须跨体系结构包复制。

资产包也不应包含 resources.pri;MRT 不能用于访问资产包文件。 要详细了解如何访问资产包文件,以及为什么资产包要求将应用安装到 NTFS 驱动器,请参阅 用资产包和包折叠进行开发

要控制是否允许执行资产包,可以在 AppxManifest 的属性元素中使用 uap6:AllowExecution,还必须将 uap6 添加到顶级元素,使其成为以下内容:

<Package IgnorableNamespaces="uap uap6" 
xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6" 
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

如果未指定,AllowExecution 的默认值为 true – 对于没有可执行文件的资产包,将其设置为 false,以使其更快发布。