如何确定应用程序功能

2012/2/9

对于 Windows Phone 应用程序,您应该指定应用程序所需的功能,例如网络、位置传感器或相机。如果您未准确指定功能,则您的应用程序可能无法正常使用或导致向 Windows Phone 商城提交的过程失败。您应在应用程序清单文件 (WMAppManifest.xml) 中指定应用程序功能。根据您的目标操作系统是 Windows Phone OS 7.1 还是 Windows Phone OS 7.0,您可以使用商城测试工具包或 Windows Phone 功能检测工具来检测应用程序功能。本主题介绍如何确定您应用程序的功能。

若要完成这些过程,计算机上必须安装有 Windows Phone SDK。有关更多信息,请参阅安装 Windows Phone SDK

应用程序功能是指 Windows Phone 应用程序所需的功能,例如网络、位置传感器或相机。您应在应用程序清单文件 (WMAppManifest.xml) 中指定应用程序功能。默认情况下,当您创建 Windows Phone 项目时,该应用程序清单文件会包含 Windows Phone 支持的所有手机功能列表。有关功能及其描述的完整列表,请参阅 Windows Phone 的应用程序清单文件

Windows Phone 提供了一个由功能驱动的安全模型,在该模型中用户必须选择应用程序中的特定功能。对于特定方案,由应用程序调用的 Windows Phone API 在运行时可能需要特定的安全权限或用户泄露。Windows Phone 操作系统根据该应用程序清单文件中列出的功能向应用程序授予安全权限。您向商城进行的应用程序提交可能会失败,具体取决于您使用的 API 和指定的功能。

当您将应用程序提交到商城时,会通过编程方式检测该应用程序的功能。应用程序提交过程使用 Microsoft 中间语言 (MSIL) 代码分析来检测应用程序所需的手机功能。应用程序提交过程将功能列表(不管是自动生成的列表还是您已修改的列表)替换为您的应用程序所需的特定功能。这意味着,如果随应用程序一起提交的应用程序清单不包含应用程序所使用的功能,这些功能将在提交过程中添加。

有两种例外情况,不会在提交过程中添加或修改功能。第一种例外情况是,如果您从清单文件中删除以下网络功能,则在提交过程中不会添加该功能。这会使您退出应用程序的网络支持。

  • ID_CAP_NETWORKING

第二种例外情况是,您可以指定面向前方的相机硬件要求,但提交过程不会对其进行修改。

  • ID_HW_FRONTCAMERA

有关面向前方的相机的更多信息,请参阅 Windows Phone 的相机和照片概述

您可以在开发过程中使用工具测试应用程序来检测应用程序所需的手机功能,而不是依赖应用程序提交过程。如果您的应用程序针对的是 Windows Phone OS 7.1,则可以使用“商城测试工具包”中的“功能验证”测试来检测应用程序所需的特定功能并用这些功能来替换应用程序清单文件中自动生成的功能列表。如果您的应用程序针对的是 Windows Phone OS 7.0,则可以使用“Windows Phone 功能检测工具”完成该操作。

注意注意:

您应该始终根据应用程序所需的确切手机功能测试应用程序。如果不根据应用程序所需的特定功能测试应用程序,则可能会发生各种最终用户问题。

商城测试工具包是一套测试,用于评估 Windows Phone OS 7.1 应用程序的商城准备情况。商城测试工具包中包含一个“功能验证”测试,该测试作为其自动测试套件的一部分运行。有关商城测试工具包的更多信息,请参阅 Windows Phone 商城测试工具包。如果您想查看“功能验证”测试应用的规则以评估应用程序所使用的功能,则可以在位于以下位置之一的 Rules.xml 文件中找到这些规则。

  • Program Files\Microsoft SDKs\Windows Phone\v7.1\Tools\Marketplace

  • Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Tools\Marketplace

使用商城测试工具包来确定应用程序功能

  1. 在 Visual Studio 中,创建您希望测试功能的 Windows Phone OS 7.1 应用程序的发布版本。有关如何创建发布版本的信息,请参阅如何:使用 Visual Studio 生成和部署 Windows Phone 应用程序

  2. 在“解决方案资源管理器”中,选择启动项目,然后在“项目”菜单上选择“打开商城测试工具包”选项。随即会打开商城测试工具包。

  3. 单击“自动测试”标签,然后单击“运行测试”。这将对您的应用程序运行所有自动测试,包括“功能验证”测试。

    注意注意:

    如果没有为您的应用程序指定插图或屏幕截图,则“图标”“屏幕截图”测试应该会失败。这些测试结果与功能结果无关。

  4. 查看“功能验证”测试的“结果详细信息”列。此列中标识的每个功能都以 ID_CAP 开头。下面是运行“功能验证”测试的结果示例。ID_CAP_NETWORKING 是此示例中列出的唯一功能。

    [INFORMATION]: Capabilities used by application:
    ID_CAP_NETWORKING
    
  5. 在“解决方案资源管理器”中,打开您应用程序的应用程序清单文件 (WMAppManifest.xml),然后删除“结果详细信息”列中未列出的所有功能。对于上一步中的结果示例,您应该将除网络 (ID_CAP_NETWORKING) 之外的所有功能都删除。

  6. 使用该工具提供的已授予功能生成、测试和部署您的应用程序。

“功能检测工具”是一个基于规则的命令行实用工具,您可以在目标为 Windows Phone OS 7.0 的应用程序上使用该工具。该工具使用包含程序集或程序集文件的项目输出文件夹作为输入并输出该应用程序使用的安全功能列表。在随工具一起分发的名为 Rules.xml 的文件中捕获用于发布或删除功能的规则。下表列出了功能检测工具支持的命令和参数。

命令

说明

CapabilityDetection.exe /?

显示简单的帮助描述。

CapabilityDetection rules path "file path"

检测应用程序所需的手机功能。

  • rules path - Rules.xml 文件的路径。

  • file path - 包含程序集或程序集文件的项目输出文件夹的路径。如果文件路径包含空格,则必须将空格用引号 ("") 引起来。

使用功能检测工具来确定应用程序功能

  1. 在 Visual Studio 中,创建您希望测试功能的 Windows Phone OS 7.0 应用程序的发布版本。

  2. 打开命令提示符并导航到包含 Windows Phone 功能检测工具 (CapabilityDetection.exe) 的文件夹。您可以在以下位置之一找到该文件夹:

    • Program Files\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect

    • Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect

  3. 输入以下命令并在 file path 参数中指定包含程序集或程序集文件的项目输出文件夹的位置。

    CapabilityDetection.exe Rules.xml "file path"
    
    注意注意:

    如果文件路径包含空格,则必须将空格用引号 ("") 引起来。如果文件路径为文件夹,则不应包含结尾的斜杠 (\)。

    下面显示两个示例:

    CapabilityDetection.exe Rules.xml "C:\MyApp"
    CapabilityDetection.exe Rules.xml "C:\MyApp\MyApp.dll"
    
  4. 复制该工具显示的功能输出。下面显示一个输出示例:

    ID_CAP_NETWORKING
    ID_CAP_WEBBROWSERCOMPONENT
    

    如果没有检测到功能,则不显示输出。

    注意注意:

    如果您为文件路径指定 XAP 文件,则不显示输出。

  5. 在 Visual Studio 中打开您的项目,然后打开应用程序清单文件 (WMAppManifest.xml)。

  6. 从工具输出中删除 Capabilities 元素中的所有功能并添加所需的功能。例如,使用上一步中的输出,该元素应该如下所示:

    <Capabilities>
          <Capability Name="ID_CAP_NETWORKING"/>
          <Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/>
    </Capabilities>
    
    
  7. 使用该工具提供的已授予功能生成、测试和部署您的应用程序。

    重要说明重要说明:

    在某些情况下,即使您的应用程序未使用网络,该工具也可能会返回 ID_CAP_NETWORKING 功能。例如,如果您在 XAML 中声明一个本地 URI。这种情况下,您可以删除该功能,但要确保删除该功能之后完全测试和部署您的应用程序。

显示: