HoloLens可以让我们在真实世界中看到全息图像内容。但是它本质上还是一台Windows 10设备,这意味着HoloLens可以以2D应用形式运行Windows Store里的大部分UWP应用。
目标平台设为Windows.Universal Targeting Windows.Universal
微软过去几年平台一直在变革,所以开发者往往会有不同的起点,所以下面会给出一些指南,来帮助不同起点的开发者顺利的迁移代码带UWP平台上。
不同的起点 Starting Points
这几年大家接触的Windows平台会有很多,下面分别提供针对他们的指引。
起点 |
AppX Manifest清单目标平台 |
如何迁移到UWP? |
---|---|---|
Windows Phone (Silverlight) | Silverlight App Manifest清单 | Migrate to WinRT |
Windows Phone 8.1 Universal | 不包含目标平台的8.1 AppX Manifest清单 | Migrate your app to the Universal Windows Platform |
Windows Store 8 | 不包含目标平台的8 AppX Manifest清单 | Migrate your app to the Universal Windows Platform |
Windows Store 8.1 Universal | 不包含目标平台的8.1 AppX Manifest清单 | Migrate your app to the Universal Windows Platform |
修改目标平台为Windows.Universal Change your Target to Windows.Universal
按照指引文档适配后,你的应用可以运行与UWP平台上啦,包括手机、PC、XBox和HoloLens等等。
现在让我们打开 AppX的项目清单文件,确保你的UWP应用可以在HoloLens上运行。
- 打开你的VS项目,导航到清单文件
- 右键Package.appxmanifest清单文件,选择
- 确保在<Dependencies>节下的目标平台是Windows.Universal
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.10586.0" />
</Dependencies>
- 保存清单文件
你可以使用任何文本编辑器来修改此清单文件,效果都一样。
在模拟器上运行应用 Run in the HoloLens Emulator
现在你可以直接生成项目并在HoloLens模拟器上运行你的应用。
- 确保你已经安装了HoloLens模拟器
- 选择x86作为目标平台架构
- 选择HoloLens模拟器作为部署目标
- 开始在模拟器上进行调试
- 你可以使用键盘鼠标来模拟HoloLens的操作,来测试你的应用
后续步骤 Next Steps
启动应用时可能会出现以下两种情况:
- 应用在被放置好后显示闪屏图片后立即运行,这表示一切正常。
- 应用在被放置好后出现载入动画,最后仍然只显示闪屏图片,这说明你的应用启动时发生错误,需要解决。
如何调试 How to debug
HoloLens是新出现的Windows 10设备,所以许多UWP API在HoloLens上仍处于测试和开发阶段。下面是一些我们发现的问题:
- 应用启动时不支持文件系统查询操作
- 使用Web认证代理或Web客户经理以外的传统认证方式
- 启动时会较深入的查询硬件设备
- 启动时会使用日历、联系人、协议等API
- 使用一些大的第三方库可能会导致不能通过HoloLens上的审核
为搞明白是什么原因导致你的应用不能正常启动,你需要进行调试。
通过调试器运行应用 Running your UWP app in the debugger
调试步骤很简单,通过菜单Debug > Start Debugging即可。
- 如果应用发生未处理异常会第一时间被调试器捕获,VS里会显示相关的异常信息。如果你已经在应用里使用try catch做了异常捕获处理,那么异常信息可以被你的代码获取到,可以像下图那样显示出来。
- 你也可以通过打断点单步调试来详细定位到问题代码块,一般来讲可以解决大部分问题。
了解应用错误的原因 Understanding the failure
正如上文提到的,HoloLens开发者版存在一些由测试和开发中的API导致的已知问题。如果你的应用使用了潜在问题API列表中的API,那么可以通过Windows Feedback工具反馈给微软。
如何打开Windows Feedback工具
- 手势唤出开始菜单
- 打开Windows Feedback应用
- 选择Developer Platform,然后发送出错细节给微软
微软会持续地修复UWP API的问题。但是对于一些因为设计时就不支持HoloLens的API,下面是一些可能有帮助的解决模式:
错误码 Error codes
- 不应该返回一个特殊的HRESULT错误,因为这个API目前还没完善。 相反,API应通过使用空集合,布尔返回值,显式状态代码等抛出错误信息。请注意,如果API已经由于编程错误(例如传递无效参数)而返回HRESULT,则它将 继续酌情返还这些错误。
集合 Collections
- 当我们使用属性索引器或者方法的返回值是集合时,不应该简单地直接返回一个null对象,而最好返回一个数量为0的集合对象。
- 在一些罕见的情况下,API会暴露一个可读/写的集合类型属性,允许应用程序提供自己的值。 在这些情况下,如果API在完全功能的情况下已经返回null,它应该在部分功能的情况下继续返回null。 注意,这是一个API设计的反模式,大多数UWP API一般不应该遵循它。
异步方法 Asynchronous functions
- 不应该从Async异步方法返回空IAsyncAction或IAsyncOperation结果。 相反,它们将返回已经处于任务完成状态并具有适当结果(空集合,状态代码等)的有效对象。
事件 Events
- 事件不应该失败或者忽略事件注册行为。相反,API应该接受事件注册/取消事件注册,但绝不会引发事件。 API必须持有任何已注册的事件处理程序(而不是默默地忽略它们),因为应用程序可能无意中依赖注册的事件进行生命周期管理。
更新UI Update your UI
现在你的应用在HoloLens中以2D面板的形式展示在世界中,我们下面应该让我们的应用看起来更漂亮。下面使一些要考虑的内容:
- HoloLens将以固定分辨率和DPI运行所有2D应用,相当于853x480有效像素。 考虑你的设计是否需要在这个比例下进行细化,并考虑查看我们的2D UI指南,来提高用户体验。
- HoloLens不支持2D动态磁贴。 如果您的核心功能显示活动磁贴上的信息,请考虑将该信息移回应用程序。
- HoloLens不支持共享合同,2D打印,全屏模式,投射和可能在您的应用程序中的其他功能。
新的输入可能性 New input possibilities
HoloLens使用先进的深度传感器感知世界和用户。 这使得高级手势得以使用,如bloom和air-tap手势。 强大的麦克风还确保了较好的语音体验。 HoloLens负责处理UWP应用的所有复杂内容,将您的Gaze和手势抽象并转换为常规UWP输入机制的指针事件。 例如,HoloLens Clicker模拟Air-Tap手势,但2D应用程序不需要知道输入来自哪里,它们只知道发生了指针点击事件。
以下是将UWP应用迁移到HoloLens时应了解的关于输入方式的高级概念/方案:
- 当用户注视应用时,Gaze会触发鼠标悬停事件,可能意外地触发菜单,弹出窗口或其他用户界面元素,
- 凝视不如鼠标输入那么精确。 对HoloLens应该使用适当大小的点击目标,类似于触摸友好的移动应用的UI。 应用UI边缘附近的小元素特别难以与之交互。
- 用户必须可以在应用中切换输入模式,从滚动到拖动到两个手指平移手势。 如果您的应用是为触摸输入设计的,请考虑确保没有主要功能只依赖手势。 如果是,请考虑使用其他输入机制,例如可以启动手指平移手势的按钮。 例如,地图应用程序可以使用两个手指平移进行缩放,但具有加号,减号和旋转按钮,以模拟与单次点击相同的缩放交互。
语音输入是HoloLens体验的关键部分。 我们已经启用了在Windows 10中的所有语音API为HoloLens上的Cortana提供支持。
发布和维护你的UWP应用 Publish and Maintain your Universal app on HoloLens
一旦你的应用可以正常运行,那么你就可以打包它并将它上传到应用商店中。