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清單文件,選擇View Code

- 確保在<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
一旦你的應用可以正常運行,那么你就可以打包它並將它上傳到應用商店中。
