HoloLens开发手记 - 构建2D应用 Building 2D apps
2017-01-19 17:09
429 查看
HoloLens可以让我们在真实世界中看到全息图像内容。但是它本质上还是一台Windows 10设备,这意味着HoloLens可以以2D应用形式运行Windows Store里的大部分UWP应用。
现在让我们打开 AppX的项目清单文件,确保你的UWP应用可以在HoloLens上运行。
打开你的VS项目,导航到清单文件
右键Package.appxmanifest清单文件,选择View Code
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926152416688-1060151695.png)
确保在<Dependencies>节下的目标平台是Windows.Universal
保存清单文件
你可以使用任何文本编辑器来修改此清单文件,效果都一样。
确保你已经安装了HoloLens模拟器
选择x86作为目标平台架构
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926152904219-1302331699.png)
选择HoloLens模拟器作为部署目标
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926152937344-365149229.png)
开始在模拟器上进行调试
你可以使用键盘鼠标来模拟HoloLens的操作,来测试你的应用
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926153115360-1040186554.png)
应用在被放置好后显示闪屏图片后立即运行,这表示一切正常。
应用在被放置好后出现载入动画,最后仍然只显示闪屏图片,这说明你的应用启动时发生错误,需要解决。
应用启动时不支持文件系统查询操作
使用Web认证代理或Web客户经理以外的传统认证方式
启动时会较深入的查询硬件设备
启动时会使用日历、联系人、协议等API
使用一些大的第三方库可能会导致不能通过HoloLens上的审核
为搞明白是什么原因导致你的应用不能正常启动,你需要进行调试。
如果应用发生未处理异常会第一时间被调试器捕获,VS里会显示相关的异常信息。如果你已经在应用里使用try catch做了异常捕获处理,那么异常信息可以被你的代码获取到,可以像下图那样显示出来。
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926155925328-1524152131.png)
你也可以通过打断点单步调试来详细定位到问题代码块,一般来讲可以解决大部分问题。
如何打开Windows Feedback工具
手势唤出开始菜单
打开Windows Feedback应用
选择Developer Platform,然后发送出错细节给微软
微软会持续地修复UWP API的问题。但是对于一些因为设计时就不支持HoloLens的API,下面是一些可能有帮助的解决模式:
错误码 Error codes
不应该返回一个特殊的HRESULT错误,因为这个API目前还没完善。 相反,API应通过使用空集合,布尔返回值,显式状态代码等抛出错误信息。请注意,如果API已经由于编程错误(例如传递无效参数)而返回HRESULT,则它将 继续酌情返还这些错误。
在一些罕见的情况下,API会暴露一个可读/写的集合类型属性,允许应用程序提供自己的值。 在这些情况下,如果API在完全功能的情况下已经返回null,它应该在部分功能的情况下继续返回null。 注意,这是一个API设计的反模式,大多数UWP API一般不应该遵循它。
HoloLens将以固定分辨率和DPI运行所有2D应用,相当于853x480有效像素。 考虑你的设计是否需要在这个比例下进行细化,并考虑查看我们的2D UI指南,来提高用户体验。
HoloLens不支持2D动态磁贴。 如果您的核心功能显示活动磁贴上的信息,请考虑将该信息移回应用程序。
HoloLens不支持共享合同,2D打印,全屏模式,投射和可能在您的应用程序中的其他功能。
以下是将UWP应用迁移到HoloLens时应了解的关于输入方式的高级概念/方案:
当用户注视应用时,Gaze会触发鼠标悬停事件,可能意外地触发菜单,弹出窗口或其他用户界面元素,
凝视不如鼠标输入那么精确。 对HoloLens应该使用适当大小的点击目标,类似于触摸友好的移动应用的UI。 应用UI边缘附近的小元素特别难以与之交互。
用户必须可以在应用中切换输入模式,从滚动到拖动到两个手指平移手势。 如果您的应用是为触摸输入设计的,请考虑确保没有主要功能只依赖手势。 如果是,请考虑使用其他输入机制,例如可以启动手指平移手势的按钮。 例如,地图应用程序可以使用两个手指平移进行缩放,但具有加号,减号和旋转按钮,以模拟与单次点击相同的缩放交互。
语音输入是HoloLens体验的关键部分。 我们已经启用了在Windows 10中的所有语音API为HoloLens上的Cortana提供支持。
目标平台设为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清单文件,选择View Code
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926152416688-1060151695.png)
确保在<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作为目标平台架构
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926152904219-1302331699.png)
选择HoloLens模拟器作为部署目标
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926152937344-365149229.png)
开始在模拟器上进行调试
你可以使用键盘鼠标来模拟HoloLens的操作,来测试你的应用
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926153115360-1040186554.png)
后续步骤 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做了异常捕获处理,那么异常信息可以被你的代码获取到,可以像下图那样显示出来。
![](https://images2015.cnblogs.com/blog/599309/201609/599309-20160926155925328-1524152131.png)
你也可以通过打断点单步调试来详细定位到问题代码块,一般来讲可以解决大部分问题。
了解应用错误的原因 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
一旦你的应用可以正常运行,那么你就可以打包它并将它上传到应用商店中。
相关文章推荐
- HoloLens开发手记 - HoloLens上的应用视图 App views on HoloLens
- Android API Guide for Media Apps(三)—— 构建音频应用(Building an Audio App)
- android wear开发之:建立可穿戴设备的应用 - Building Apps for Wearables
- 开始开发HoloLens应用吧 Start Developing HoloLens Apps Today
- Android API Guide for Media Apps(七)——构建一个视频应用(Building a Video App)
- 快速构建Windows 8风格应用1-开发工具安装及模拟器使用
- Windows phone 应用开发[12]-Pex 构建自动化白盒测试[下] 转:http://www.cnblogs.com/chenkai/archive/2012/01/29/2331263.html
- [分享]源代码&开发手记:SAE应用“车百科” (Python + SAE + Bottle + Bootstrap) - Bottle - Python4cn(news, jobs)
- 基于Spring Boot构建应用开发规范
- HoloLens开发手记 - Unity之摄像头篇
- MyEclipse移动开发教程:构建MobiOne应用(二)
- Developing Universal Windows Apps 开发UWA应用 问答
- HoloLens开发手记 - 使用Windows设备控制台 Using Windows Device Portal
- 幻世(OurDream)2D图形引擎使用教程1——认识幻世,构建幻世开发环境
- Oracle应用开发手记
- 使用 AppFuse 快速构建 J2EE 应用---快速开发,从 AppFuse 开始
- Android官方开发文档Training系列课程中文版:构建第一款安卓应用之程序运行
- MyEclipse移动开发教程:构建MobiOne应用(三)
- HoloLens开发手记-凝视 Gaze
- [洪流学堂]Hololens开发入门篇3:使用基本功能开发一个小应用