无论客户端设备上的 OS 平台如何,MSIX SDK 都为开发人员提供了将包内容分发到客户端设备的通用方法。 这使开发人员能够打包其应用内容一次,而无需为每个平台打包。
为了利用 MSIX SDK 以及将包内容分发到多个平台的功能,我们提供了一种方法来指定要将包提取到的目标平台。 这意味着,你可以确保仅在需要时从包中提取包内容。
下表显示了在清单中声明的目标设备系列。
平台 | 家庭 | 目标设备系列 | 注释 | ||
---|---|---|---|---|---|
Windows 10 | 电话 | Platform.All |
Windows.Universal | Windows.Mobile | 移动设备 |
桌面 | Windows.Desktop | 个人电脑 | |||
Xbox 的 | Windows.Xbox | Xbox 主机 | |||
Surface 集线器 | Windows.Team | 大屏幕 Win 10 设备 | |||
HoloLens | Windows.Holographic | VR/AR 头戴显示设备 | |||
物联网 | Windows.IoT | IoT 设备 | |||
iOS | 电话 | Apple.Ios.All | 苹果 iOS 手机 | iPhone、Touch | |
平板电脑 | Apple iOS平板 | iPad mini、iPad、iPad Pro | |||
电视 | Apple iOS TV | Apple TV | |||
手表 | Apple.Ios.Watch | iWatch | |||
MacOS | 桌面 | Apple.MacOS.All | MacBook Pro、MacBook Air、Mac Mini、iMac | ||
安卓 | 电话 | Google.Android.All | Google.Android.Phone | 面向任何 Android 风格的移动设备 | |
平板电脑 | 谷歌安卓平板电脑 | Android 平板电脑 | |||
桌面 | Google.Android.Desktop | Chromebook | |||
电视 | Google.Android.TV | Android 大屏幕设备 | |||
手表 | Google.Android.Watch | Google 穿戴设备 | |||
Windows操作系统 | 7 | Windows7.Desktop | Windows 7 设备 | ||
8 | Windows8.Desktop | Windows 8/8.1 设备 | |||
网络 | 微软 | Web.All | Web.Edge.All | Edge Web 引擎应用 | |
安卓 | Web.Blink.All | Blink Web 引擎应用 | |||
铬 | Web.Chromium.All | Chrome Web 引擎应用 | |||
iOS | Web.Webkit.All | Webkit Web 引擎应用 | |||
MacOS | Web.Safari.All | Safari Web 引擎应用 | |||
Linux的 | 任意/所有 | Linux.All | 所有 Linux 分发版 |
在应用包清单文件中,如果需要仅在特定平台和设备上提取包内容,则需要包含相应的目标设备系列。 如果您希望构建一个包,使其能够支持所有平台和设备类型,请选择 Platform.All 作为目标设备系列。 同样,如果希望包仅在 Web 应用中受支持,请选择 “Web.All”。
示例清单文件(AppxManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
IgnorableNamespaces="mp uap uap3">
<Identity Name="BestAppExtension"
Publisher="CN=awesomepublisher"
Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="56a6ecda-c215-4864-b097-447edd1f49fe" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
<Properties>
<DisplayName>Best App Extension</DisplayName>
<PublisherDisplayName>Awesome Publisher</PublisherDisplayName>
<Description>This is an extension package to my app</Description>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Dependencies>
<TargetDeviceFamily Name="Platform.All" MinVersion="0.0.0.0" MaxVersionTested="0.0.0.0"/>
</Dependencies>
<Applications>
<Application Id="App">
<uap:VisualElements
DisplayName="Best App Extension"
Description="This is the best app extension"
BackgroundColor="white"
Square150x150Logo="images\squareTile-sdk.png"
Square44x44Logo="images\smallTile-sdk.png"
AppListEntry="none">
</uap:VisualElements>
<Extensions>
<uap3:Extension Category="Windows.appExtension">
<uap3:AppExtension Name="add-in-contract" Id="add-in" PublicFolder="Public" DisplayName="Sample Add-in" Description="This is a sample add-in">
<uap3:Properties>
<!--Free form space-->
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
</Package>
平台版本
在上面的示例清单文件中,除了平台名称外,还有用于指定 MinVersion 和 MaxVersionTested 这些参数在 Windows 10 平台上使用的参数。 在 Windows 10 上,程序包仅部署在大于 MinVersion 的 Windows 10 OS 版本上。 在其他非 Windows 10 平台上,MinVersion 和 MaxVersionTested 参数不用于声明是否提取包内容。
如果想要对所有平台(Windows 10 和非 Windows 10)使用包,建议使用 MinVersion 和 MaxVersionTested 参数来指定希望应用正常工作的 Windows 10 OS 版本。 因此,清单的 “依赖项 ”部分如下所示:
<Dependencies>
<TargetDeviceFamily Name="Platform.All" MinVersion="0.0.0.0" MaxVersionTested="0.0.0.0"/>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.14393.0" MaxVersionTested="10.0.16294.0"/>
</Dependencies>
MinVersion 和 MaxVersionTested 是清单中的必填字段,它们需要符合象限表示法(#.#.#.#.#)。 如果仅在非 Windows 10 平台上使用 MSIX 打包 SDK,则可以简单地将“0.0.0.0”用作 MinVersion 和 MaxVersionTested 的版本号。
如何在所有平台上有效使用同一包(Windows 10 和非 Windows 10)
为了充分利用 MSIX 打包 SDK,您需要以能够在 Windows 10 上作为应用包部署并同时支持其他平台的方式生成包。 在 Windows 10 上,可以将软件包构建为应用扩展。 有关应用扩展以及如何帮助扩展应用的详细信息,请参阅 应用扩展简介 博客文章。
在本文前面所示的清单文件示例中,你会注意到 AppExtension 元素中的 Properties 元素。 清单文件的此部分未执行验证。 这样,开发人员就可以在扩展和主机/客户端应用之间指定所需的元数据。