你可以方便地打开该.appx ZIP文件中的任意文件,因为Visual Studio并未对该文件及其内容进行加密。如果你打开AppxBlockMap.xml,将会看到一份文件清单,以及每个文件对应的64KB压缩块的哈希值和大小。这个AppxBlockMap.xml文件是由MakeAppx.exe实用工具创建的。Windows使用AppxBlockMap.xml文件验证程序包文件的完整性,确保该.appx文件的所有内容在创建之后没有受到任何修改。
AppxBlockMap.xml提供的另一个优秀的特性是差异化下载。在为应用创建新版本时,通常会保留绝大部分已经存在的资产文件,而只修改其中少数几个文件,或者添加一些新的资产文件。当用户安装程序包的新版本时,Windows使用AppBlockMap.xml文件来查看哪些文件发生了改变,并且只下载文件中被更新的部分(块)。这一功能极大地提高了安装应用程序新版本的速度,也降低了网络的消耗,带给用户更加低廉的网络费用。
进一步,如果多个程序包中包含着相同的文件(无论发布者是谁),系统将会知道这些文件已经被安装过了(基于哈希值),因此仅创建该文件的NTFS硬链接。这一功能显著缩短了下载的时间,并能够防止由于多次安装同一文件而造成硬盘空间的浪费。例如,如果多个程序包中包含有相同的SQLite文件和Bing地图文件,这些文件只会被下载一次,并在用户的PC上驻留一次。基于这一原因,开发人员应尝试在多个程序包中使用相同的文件,避免使用仅有几个字节略有改动的一次性版本。
在表2.5中,你可以看到Visual Studio从原始的Package.appxmanifest文件生成的AppxManifest.xml文件。除了少量替换和添加之外,这两个文件的绝大部分内容是相同的。例如,此时<Resources>分区包含了你的应用所支持的语言。此外,扩展SDK程序包的引用被添加到了<Extensions>节点。
除了创建表2.4中展示的文件以外,Visual Studio的“创建应用程序包”向导还生成了一个.appxupload文件。该文件其实就是一个包含.appx文件和.appxsym文件的ZIP文件。你可以借助应用商店仪表盘将.appxupload文件上传到Windows应用商店。