一 清单文件内容介绍
当我们先建了一个项目之后,我们可以看到vs自动会为我们创建了很多文件,正常人都会先一个个去翻看下每个文件都是干啥的,都主要写了些啥,在这些文件中,在Properies目录下面,我们可以看到有名为WMAppManifest.xml的文件,这是一个xml文件,但是当我们双击打开时,会发现打开的是这个可视化的编辑界面。
一眼看上去,好像是对wp8app的一些可视化配置。我们通过“右击--》查看代码”可以看到清单的真实内容,一堆xml标记。
这就是应用程序的清单文件,下面是一个 Windows Phone 8 应用的默认清单文件示例。
<?xml version="1.0" encoding="utf-8"?>
<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2012/deployment" AppPlatformVersion="8.0">
<DefaultLanguage xmlns="" code="zh-CN" />
<Languages xmlns="">
<Language code="zh" />
</Languages>
<App xmlns="" ProductID="{abebaa4a-9a1d-4650-87ed-c5ebd44b3da6}" Title="PhoneApp" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="PhoneApp author" Description="Sample description" Publisher="PhoneApp" PublisherID="{7bb96815-3d01-4edc-ba40-e6619d1ab95b}">
<IconPath IsRelative="true" IsResource="false">Assets\ApplicationIcon.png</IconPath>
<Capabilities>
<Capability Name="ID_CAP_NETWORKING" />
<Capability Name="ID_CAP_MEDIALIB_AUDIO" />
<Capability Name="ID_CAP_MEDIALIB_PLAYBACK" />
<Capability Name="ID_CAP_SENSORS" />
<Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
</Capabilities>
<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
</Tasks>
<Tokens>
<PrimaryToken TokenID="PhoneAppToken" TaskName="_default">
<TemplateFlip>
<SmallImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileSmall.png</SmallImageURI>
<Count>0</Count>
<BackgroundImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileMedium.png</BackgroundImageURI>
<Title>PhoneApp</Title>
<BackContent>
</BackContent>
<BackBackgroundImageURI>
</BackBackgroundImageURI>
<BackTitle>
</BackTitle>
<DeviceLockImageURI>
</DeviceLockImageURI>
<HasLarge>
</HasLarge>
</TemplateFlip>
</PrimaryToken>
</Tokens>
<ScreenResolutions>
<ScreenResolution Name="ID_RESOLUTION_WVGA" />
<ScreenResolution Name="ID_RESOLUTION_WXGA" />
<ScreenResolution Name="ID_RESOLUTION_HD720P" />
</ScreenResolutions>
</App>
</Deployment>
其实关于这段xml,很多节点我们猜猜,也能猜出来大概是个啥意思,我们来详细的介绍下几个常用的节点。
Deployment:
可以看到在这段xml中,Deployment是跟节点。他有两个属性。
xmlns: 命名空间。对于 Windows Phone 8,默认http://schemas.microsoft.com/windowsphone/2012/dployment;
而对于 Windows Phone OS 7.1,默认http://schemas.microsoft.com/windowsphone/2009/deployment。
AppPlatformVersion:Windows Phone SDK 的版本或平台的运行时二进制文件。对于 Windows Phone 8,默认值为
8.0; 而对于 Windows Phone OS 7.1,默认值为 7.1。
DefaultLanguage/Languages:
DefaultLanguage 和 Languages 元素识别应用所支持的语言。您在这些元素中指定的语言与您的应用在 Windows
Phone 商店 中列出。DefaultLanguage 元素是必需的。如果您指定的是商店不支持的语言,那么提交应用时会被
拒绝。这边需要强调的是,这些属性都是可以在可视化界面编辑的,如DefaultLanguage 就可以在项目设计器“应用
程序”页面上的“程序集信息”对话框中指定的“非特定语言”设置,如下图:
而“支持的区域性”这边的语文选择就对应于Languages ,在这边设置会自动更新清单文件中的节点。
但是需要注意的是,这种同步只是单向的哦。也就是说你改了xml文件,这边界面中是不会同步的。
他们也拥有两个属性:
xmlns: 还是命令空间,这跟上面介绍的是一样的。
code: 特定语言的代码。例如,英语用 en,中文用zh-CN。
App:
这是主要的节点,配置关于app的一些属性,还包含了很多重要的子元素。一些顾名思义的属性我就不做介绍了,如作
者,版本之类的。
ProductID:默认值是项目的 GUID。在提交应用期间,新产品 ID 将插入到清单文件中
RuntimeType:对于 Windows Phone 8 应用,默认值为 Silverlight 或 Modern Native,对于 Windows
Phone OS 7.1 应用,默认值为 Silverlight 或XNA,具体取决于项目类型。
Genre: 流派,默认值为 Apps.Normal 或 Apps.Game,具体取决于项目类型。
使用 Apps.Normal 的应用将出现在手机的应用列表中。使用Apps.Games 的应用将出现在手机的游戏中心中。
HubType:允许您的应用出现在音乐和视频中心的附加程序部分。它用于应用提交前的测试,必须在清单文件中手动输入。
值为1表示启用此功能。
IconPath:
IconPath是App的子元素,该元素提供应用列表中可见的应用图标的位置。这个元素我们不需要特别关注,仅供内部使用。
Capabilities:
这个节点跟Requirements是非常非常重要的,Windows Phone 提供了一个由功能驱动的安全模型,在该模型中用户必
须选择应用中的特定功能。当您在开发应用时,您可以成功地在 Windows Phone 模拟器 中部署和运行您的应用,而无
需指定正确的功能,但在将应用部署到手机时,您必须指定正确的功能。如果您未在需要时使用功能,应用将引
发UnauthorizedAccessException 异常。当您尝试在应用中使用该功能时,将显示 Access denied 消息,并且如果未
处理该异常,将意外退出。-----这是msdn上的解释,也就是说如果你没有勾选你app中用到的相应的功能,那么在真实的
环境中会导致程序不能正常使用。对于这样做的原因,主要的原因有两点:
1. 确保正确公开信息 - 当应用的功能会带来安全风险时,必须通知用户。他们必须进行选择才能允许激活功能。
2. 减少攻击面 - 功能用来创建可在其中执行应用的安全空间。此空间一旦在安装时创建,往后就一直供应用使用。
其实这些配置一般也是直接在可视化界面中直接勾选的,见下面“清单设计器”的介绍。
Capability:Capability 元素有一个特性,即名称。名称指定您想要为应用启用的功能。
Tokens:
每个应用都有一个用户可固定至“开始”屏幕的图块。Tokens描述图块的元素和特性
TokenID:图块名称。默认值为项目名称。
TaskName:用户点按图块时图块所调用任务名称。默认值为 _default。及Tasks中配置的。
TemplateFlip:
TemplateFlip是控制 Windows Phone 8 的应用图块的默认模板,属性基本都能看得明白。
HasLarge:wp8中指示应用是否支持大型图块的值。没有值指示不支持大型图块。
ScreenResolutions:
ScreenResolutions用于指定应用支持的分辨率。Windows Phone 8 应用支持三种屏幕分辨率。这些
包括ID_RESOLUTION_WVGA、ID_RESOLUTION_WXGA 和 ID_RESOLUTION_HD720P。
Requirements:
它用于指定硬件要求,并针对其手机拥有运行应用所需硬件的用户限制应用的公开范围。如果您的应用要求特定硬件以实现正
常工作,您应该在将应用提交到商店之前,将要求添加到应用清单。这意味着您的应用仅在用于购买时显示和提供,并且
仅可以由其手机具备所需硬件的用户下载和安装。没有正确标记硬件要求将导致应用的评级较差,因为用户购买应用后,该
应用可能无法在他们的手机上正常运行。但是这个不是必选项,你可以不选择,但是我还是建议你认真勾选。
常用的一般就这些,还有一些其他节点,大家有需要可以自己去msdn上查看。
二 清单设计器
如果我们每次都要这样来编辑xml,那么也是一件很痛苦的事情哈,微软在这方面总是做得让我们非常满意。在Windows Phone SDK 8.0中新增入了一个清单设计器,清单设计器使你可以轻松地更新清单文件,而无需编辑文件的原始 XML。
这里可以编辑应用程序UI相关的内容,如刚才说到的分辨率,图标,标题等属性。
一看就知道,这是选择功能的界面,对应刚才讲的Capabilities节点,每个功能是干嘛的,右边也都有对应的说明。
对硬件的要求,对应于刚才讲的Requirements 节点。
最后是对程序打包发布的一些信息的配置,是不是很简单。再也不用去看繁琐的xml了。
好吧,不得不承认,我们又被微软傻瓜了,有了清单设计器,我们甚至都不知道之前一开始介绍的那些xml节点,当然有部分节点还是需要我们去手动修改xml的,在清单设计器是配置不出来的。
今天的程序清单介绍到这里,就差不多了,下章“windows phone 8 开发系列(四)XAML基本介绍”再会!
最后,参考资料:
http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/ff769509(v=vs.105).aspx