在ARM(WOA)上开发Windows时,你应该知道的事情

在ARM(WOA)上开发Windows时,你应该知道的事情

Rate This
  • Comments 0

[原文发表地址] What you need to know about developing for Windows on ARM (WOA)

[原文发表时间] 2012-06-12 5:40 AM

你可能已经听说了,ARM PC 上的新 Windows将与 Windows 8一起上市。如果你一直关注北美TechEd所涵盖的内容,那么你在主题演讲中已经看到这些设备了。在这篇文章中,我们将要涉及到对开发人员意味的所有东西。

有关 ARM中的Windows介绍,我推荐阅读Steven Sinofsky 的发表有关 Windows 8"的博客:构建针对 ARM 处理器体结构的Windows。正如Steven所提到的, 目前ARM测试设备对小型协作程序是可用的。但是今天,所有的开发人员都可以开始准备他们针对ARM PC的Metro样式应用程序。

在这篇帖子中,我将演示开发一个可以在ARM PC上运行的应用程序。你将发现在ARM中开发Windows应用程序与在x 86/64 PC上开发Metro样式应用程序一样 ;也就是说,相同的Metro样式应用程序将可以在任何硬件上运行。另外,很多你从创建其他应用程序类型 (设计、 测试、 调试等) 中知道的Visual Studio 范式将会传递到你构建Metro样式应用程序的体验中。除了下面的演练,我还录制了一个视频,那样您可以看到这些实际操作:

 

随着多年来 Windows 硬件的发展,我们一直在更新了 Visual Studio来帮助您构建面向每个版本的应用程序。例如,今天你可以使用 Visual Studio来构建在 x86 和 x 64 PC上运行的应用程序。您还可以使用 Visual Studio来构建在ARM硬件上运行的应用程序,其中包括 Windows Phone 和 Windows Embedded Compact。在 Windows 8中,您现在将能够构建针对ARM的Windows应用程序。(澄清一点,Visual Studio 本身将不会在ARM上运行,但它将能够让您构建在ARM设备上运行的应用程序)。

演练

让我们来看看在 Visual Studio 2012 中构建这些应用程序会是什么样的。不管你正在使用 JavaScript、 C + +、 Visual Basic,还是 C#,如果您已经构建了一个面向 x 86/x 64的Metro样式应用程序,那么你已经知道如何构建面向 ARM的应用程序了。您可以使用相同的Metro样式项目模板,此模板为构建应用程序提供了起始点。

image

在此例中,我们将从使用 Windows Blog Reader应用程序来开始,并演示调试流程、 测试和在ARM设备上部署它的过程。您可以找到创建此应用程序(JavaScriptC# /VB,或C+ +)的教程.

TutorialImage

远程调试

Visual Studio 提供了远程调试的功能。当与 ARM 设备一起使用时,您需要使用此功能,因为 Visual Studio总是运行在 x 86 / x 64机器上。在你开始远程调试之前,您需要在你的ARM设备中安装针对Visual Studio 2012 RC的远程工具。我们要做的第一件事是从设备的Start屏幕中启动Remote Debugger。您可能会收到一个提示来自动配置防火墙设置 (点击Configure以继续)。

RemoteDebugger

下一步从工具栏中选择“Remote Machine”

DebugMenu

(注: 如果您使用c + +,你还需要点击Debug下拉列表,并选择Configuration Manager,然后将平台设置为"ARM"。)Visual Studio 2012 将会弹出Remote Debugger Connections对话框。如果设备是位于同一子网,那么该设备将显示在" My Subnet "下 (或者如果您是通过项目属性窗口来做的,单击Debug选项卡下的"Find…"按钮)。另外您也可以通过输入设备的计算机名称或 IP 地址来手动配置它。选择您的机器,如果系统提示的话,就输入您的登录凭据(这要视乎您所选择的身份验证模式)。

image

下一步,你会在你的ARM设备上看到一个获取开发人员许可证的提示:

image

Visual Studio 将打包和部署您的应用程序,然后在ARM设备上启动它。实现这一切需要在MSBuild、编译器、打包向导中做一些事情,但这一切明显地发生了,并允许您只集中于构建你的应用程序。

此时,你实际上添加了一台远程调试器!让我们设置一个断点,那样我们可以看到调试器的操作行为。要执行此操作,请按 Shift + F5 来停止调试,并打开 DateConverter.cs 文件。在Convert方法的第一行上设置一个断点,然后再次按 F5。(JavaScript将断点设在在 data.js 文件的getBlogPosts 函数上, C+ + 将断点设置在 DateConverter.h的Convert方法上)。

您将看到执行程序在断点处停下来了,你能拥有完整的调试器功能 (即Stepping, Breakpoints, Locals, Watches, Call Stack, Immediate Window等)。请特别注意Registers窗口,它支持ARM ,并能帮助您查看事情是如何在设备上运行的。现��,您可以按 f11 键以继续进入该方法,然后按 Shift + F5 停止调试。

C#:

CSharpStoppedInDebugger

C + +:

image

JavaScript:

image

单元测试

让我们来看看如何为我们的应用程序添加单元测试,并在ARM设备上执行它们。右击解决方案,然后单击"Add-> New Project ",然后选择" Unit Test Library(Metro style apps)"模板。将项目命名为"BlogReaderUnitTestLibrary",然后单击确定。

右击References,并选择" Add Reference…",然后单击" Solution ",并选择"WindowsBlogReader"。使用下面的代码来更新 UnitTest1.cs:

[TestClass]
public class UnitTest1
{

[TestMethod]
public void ValidateConvertForYearWithValidInput()
{
var converterInstance = new DateConverter();

//checks if Convert method returns the year properly.
DateTime currentTime = DateTime.Now;
string actualYear =
(string)converterInstance.Convert((object)currentTime,
typeof(string), "year", "Invariant");
string expectedYear = DateTime.Now.Year.ToString();
Assert.AreEqual(expectedYear, actualYear,
"The expected year to be returned by the Convert method and the actual returned value are not equal");
}

[TestMethod]
public void ValidateConvertWithInvalidInput()
{
var converterInstance = new DateConverter();

//checks if Convert method throws exception when invoked with a string input.
string currentTimeSTring = DateTime.Now.ToString();

Assert.ThrowsException<ArgumentException>(() =>
(string)converterInstance.Convert((object)currentTimeSTring,
typeof(string),
"year",
"Invariant"),
"Invoking Convert with a non-DateTime type doesn't throw");
}
}
  

类似地,C+ + 有一个针对Metro样式应用程序的单元测试库模板。需要注意的一个关键区别是 C + + 单元测试是针对 WinMD 文件运行的,而不是针对 EXE 项目的,所以在本演练的例子中, DateConverter.h 将需要被移动到一个单独的库项目中,然后被编译为 WinMD。有关如何对Metro样式应用程序进行单元测试的详细信息,请访问Windows 开发中心.

通过点击Test -> Windows-> Test Explorer,我们可以使用新的Test Explorer来启动我们的测试。(注意这将在您的 Visual Studio 机器上运行测试,而不是在ARM设备上)。

TestExplorer

我们之前安装的针对Visual Studio 2012 RC的远程工具包括一个命令行的单元测试运行器(vstest.console.exe)。我们可以用它来在ARM设备上执行我们的测试,它支持.trx 文件的脱机预览和共享结果(注意 ARM中不支持JavaScript 单元测试)。让我们通过从测试项目中创建一个 AppX 包来开始 (右键单击项目,单击Store -> Create AppX package)。按照提示,选择"ARM"作为您要构建的软件包类型。现在将 AppX 软件包复制到设备中 (可以在这里使用USB)。从命令提示符中更改到此目录:

%ProgramFiles%\Microsoft Visual Studio\11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow

运行以下命令来安装AppX证书:

certutil –addstore root BlogReaderUnitTestLibrary_1.0.0.0_ARM_Debug.cer

现在,键入以下命令:

vstest.console.exe BlogReaderUnitTestLibrary_1.0.0.0_ARM_Debug.appx /logger:trx

/Logger:trx switch创建了一个 trx 文件,它可以用于详地细分析结果。

image

手动测试

你可以在Microsoft Test Manager的帮助之下,在ARM设备上执行手动测试方案。如果要执行这项操作,在你的 x 86 / x 64 机器上运行 Microsoft Test Manager,并连接到你的远程设备。在您测试时,您记录的 bug 会从所连接的ARM设备上收集所有诊断信息。你可以直接从您的主机中截取设备的截图,并自动在TFS中创建bug。

让我们来看看实际操作。在您的设备中启动Microsoft Test Tools Adapter 服务,此服务是负责收集诊断信息的:

TestToolsAdapter

单击“Start Service”:

TestToolsAdapter2

从您的主机中启动 Microsoft Test Manager,然后转到您的"Test"中心 (假设我们已经创建了测试计划和测试用例):

image

点击" Modify "链接:

image

最后,输入你想要连接到的远程设备的名称:

ManualTestingRemoteDevice

您还可以使用" Install Windows metro style App "链接来选择安装你的WindowsBlogReader 应用程序到测试中心的远程设备中。单击工具栏中的"Run"来启动手动测试会话。您将在设备上看到一条弹出的消息,它指示您的手动测试会话已经开始了。

RecordingStarted

现在你可以执行单个的测试案例,将它们标记为成功或失败,并且记录的bug会直接从设备中捕获丰富的诊断信息。

远程性能分析

由于其各自的功率和大小的目标不同,与典型的开发机器相比,WOA和 SoC 设备有不同的 CPU、 内存和 I/O 子系统特征。性能测试将帮助优化任何你所需的事情在任何设备上构建一流的应用程序以供您的用户使用。

让我们来看看如何设置远程性能分析来分析应用程序的性能。点击Debug -> Start Performance Analysis。您将看到一个检查远程计算机的 UAC 提示 (名为 VSPerf.exe 的程序)。在ARM设备上接受提升权限提示,应用程序将在远程设备上部署和运行性能分析。

image

现在已经添加了探查器,你可以执行您的方案:

image

一旦你使用完了此应用程序,请点击Stop profiling。然后这将复制报告到您的开发机器中,并在 Visual Studio 中打开它。

ProfilerSummary

您可以以各种各样的方式来调查结果 — — 可以放大图像来查看特定时间范围内的结果,您可以使用摘要页面来快速查看选定的时间范围中最昂贵的部件是什么,您可以深入调用树的分支和它们的耗资。这里是Call Tree视图:

ProfilerCallTree

Function Details视图让你以可视化表示形式来查看调用了您所感兴趣的方法的方法的耗资,以及它调用的方法的崩溃和该方法本身中每一行代码的耗资。

ProfilerFunctionDetails

此外值得注意的是远程性能分析支持暂停和继续功能,就像本地性能分析一样。

打包你的应用程序

当你将你的应用程序上传到存储区时,如果你的应用程序只有托管代码 (C#,VB,JavaScript),您可以构建一个"Neutral"软件包。这表示该软件包包含了将在 x 86、 x 64 或ARM中运行的代码。若要创建软件包,右键单击项目,然后选择Store -> Create App Package。

image

如果您既有本机代码,也有托管代码,你将需要为你支持的每个体系结构构建一个软件包,包括 ARM。

image

在上传之前,在实际的ARM设备上运行Windows App Certification Kit(WinACK)是一个好的想法,它可以验证所有的事物在目标环境中都是按预期进行的。在Visual Studio 2012 RC中,我们提供了一个单个的 MSI,其中包括了你在ARM设备上安装它所需要的一切,那样事情变得更简单了。您可以通过下载 针对 Windows 8 发布预览的Windows 软件开发工具包 (SDK)来获取此 MSI。安装此 SDK 之后,您将在C:\Users\ <user> \Downloads\Windows Kits\8.0\StandaloneSDK\Installers下看到一个称为"Windows App Certification Kit arm_en-us.msi"的文件。只需将该文件复制到您的ARM设备中,并在那里运行它。

image

结论

在这篇文章中,我们演示了在ARM上开发一个Metro样式应用程序来在Windows 上运行的过程。我们看到,将您的Metro样式应用程序指向ARM,其中只有很少的差异。我们涵盖到了一些您需要知道的特定提示,例如,如何在设备上做远程调试和性能分析。我希望这篇文章可以帮助解答一些您的问题,并帮助您准备开发在ARM上运行的 Windows应用程序。

希望大家喜欢 !

twitter.com/jlzander上追随我的脚步。

Leave a Comment
  • Please add 2 and 1 and type the answer here:
  • Post