well.最近Team打算發布一個Windows 8 Game Application.在經過Windows 8 App Certification Kit 測試工具時遇到各種各樣錯誤導致認證無法通過.還好經過反復嘗試耗費一些時間把這些問題逐一解決.所以在一下篇章將詳述遇到問題以及對應的解決方案.
但這些問題歸結已經全部官方認證GuideLine文檔中已經有了很詳細.所以如果打算開發Windows 8 還是建議你好好讀讀這個文檔:
首先來看看我們Realse第一個新版本certificate遭遇錯誤.
提示錯誤A: 支持的API測試失敗
失敗支持的 API
發現錯誤: 支持的 API 測試檢測到以下錯誤:
- 此應用程序類型不支持 msvcr110.dll 中的 API _close。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 msvcr110.dll 中的 API _lseek。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 msvcr110.dll 中的 API _open。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 msvcr110.dll 中的 API _read。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 msvcr110.dll 中的 API _write。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API GetModuleFileNameW。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API GetModuleHandleW。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API LoadLibraryExW。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API LoadLibraryW。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API lstrlenA。SimpleGame.exe 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API GetModuleFileNameW。OpenXLivePages.dll 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API GetModuleHandleW。OpenXLivePages.dll 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API LoadLibraryExW。OpenXLivePages.dll 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API LoadLibraryW。OpenXLivePages.dll 調用此 API。
- 此應用程序類型不支持 kernel32.dll 中的 API lstrlenA。OpenXLivePages.dll 調用此 API。
未修復時會產生影響: 使用不在用於 Windows 應用商店應用的 Windows SDK 中的 API 與 Windows 應用商店認證要求沖突。
提示錯誤B:調試配置測試失敗
調試配置測試
失敗
調試配置
發現錯誤: 調試配置測試檢測到以下錯誤:
- 二進制文件 OpenXLive.WinRT.UI.winmd 是在調試模式下生成的。
- 二進制文件 SimpleGame.exe 是在調試模式下生成的。
- 二進制文件 OpenXLivePages.dll 是在調試模式下生成的。
未修復時會產生影響: Windows 應用商店不允許應用的調試版本。
提示錯誤C: Windows 安全功能測試
Windows 安全功能測試
失敗
二進制分析器
發現錯誤: 二進制分析器測試檢測到以下錯誤:
- 文件 F:\Work Projects\SnackCards XAML\SimpleGame\Debug\SimpleGame\AppX\OpenXLivePages.dll 未通過 WXCheck 檢查。
- 文件 F:\Work Projects\SnackCards XAML\SimpleGame\Debug\SimpleGame\AppX\OpenXLivePages.dll 未通過 SafeSEHCheck 檢查。
- 文件 F:\Work Projects\SnackCards XAML\SimpleGame\Debug\SimpleGame\AppX\SimpleGame.exe 未通過 WXCheck 檢查。
- 文件 F:\Work Projects\SnackCards XAML\SimpleGame\Debug\SimpleGame\AppX\SimpleGame.exe 未通過 SafeSEHCheck 檢查。
為何要提前提到這個三個Certificate認證不通過錯誤? 根據我們經驗判斷.這些錯誤全部是因為一個問題引起的. 發布的應用包是Debug版本.而不是采用Realse方式Build發布包而導致的.
這里不得不說的是.Debug 通常稱為調試版本,它包含調試信息,並且不作任何優化,便於程序員調試程序。Release 稱為發布版本,它往往是進行了各種優化,使得程序在代碼大小和運行速度上都是最優的,以便用戶很好地使用.所以采用Certificattion Kit 測試工具必須是Realse版本發布包. 這樣包含測試信息很完整. 測試驗證會正常通過.
當遇到無法調用APi或是提示存在二進制文件.這些基本是因為采用Debug版本發布包.的原因.
提示錯誤D: 應用清單合規性測試失敗.
應用清單合規性測試
失敗
應用清單
發現錯誤: 應用清單測試檢測到以下錯誤:
- 背景色和前景文本色的對比度比率為 1。此比率應大於或等於 1.5。
未修復時會產生影響: 無法將與 Windows 應用商店認證要求沖突的應用程序提交到 Windows 應用商店。
關於這個問題.
主要是因為應用程序在進入Forground TExt Color和Background Color 顏色的對比度比率超過了的問題.1.默認項目的設置時:
導致的.所以只需要修成該如下值:
即可.保證期顏色值對比度比率小於1. 重新認證這個錯誤即不再出現提示.
關於這個問題或是可以參考如下文章:
提示錯誤F: 運行時元數據驗證錯誤
Windows 運行時元數據驗證
通過
ExclusiveTo 屬性測試
失敗
類型位置測試
發現錯誤: 類型位置測試檢測到以下錯誤:
- 在與 SimpleGame 名稱空間不匹配的文件 F:\Work Projects\SnackCards XAML\SimpleGame\Debug\SimpleGame\AppX\SnackStudio_win8_metro.winmd 中找到了該名稱空間中的類型。
未修復時會產生影響: Windows 應用商店不允許使用未通過 Windows 運行時元數據驗證的應用程序。
這個問題主要是因為解決方案中.有些引用的文件或庫命名空間和當前項目命名空間不一致導致元數據認證失敗.所以基本上直找到這個文件.修改一致.如果是Realse發布時生成的文件.則需要在打開.vsproject文件修改生成NameSpace值和當前項目命名一致即可.重新生成該解決方案認證后則不再提示該錯誤.
提示錯誤G: 性能啟動測試出錯.
性能測試
通過
字節碼生成
通過
優化的綁定引用
失敗
性能啟動
發現錯誤: 性能啟動測試收集了以下結果:
- ,g:g螾ubhV1Y%?
未修復時會產生影響: 應用程序啟動時間對於為用戶創建快速且流暢的體驗非常重要。此應用不會由 Windows 應用商店接受。
在Windows 8 為了保證用戶在平板和Pc端一直用戶體驗.所以官方在認證文檔很明確規定.應用程序啟動和掛起的時間.當前如果你的應用啟動時間超過5秒.則會提示該錯誤.而導致這個問題因素有很多.Launch時間值是點擊應用到應加載資源進入開始過場動畫后進入操作主頁面這個時間段.所以如果提示該錯誤.則需要仔細分析.因為每個應用程序出現這種錯誤提示原因可能都不一致.如下分享一些我們確認這個問題地方和如何解決的方案.僅供參考.
首先應用執行時進入App_OnLaunched方法.所以在應用啟動時盡量減少不必要的資源加載.如果邏輯無法避免.應盡量減少在該函數要執行的操作.或是把這些操作放在后台來執行.保證用戶點擊應用能夠快速在5秒鍾之內得到應用主界面的響應.這個是第一個需要排除的.
另外在采用Windows App certification Kit認證時可以通過如下方式來查看認證Log日志和測試時具體值.類似.當前提示在Launch這個應用超過5秒. 那你是否想知道當前應用啟動時間是多少?這里有一個小技巧.在C默認的安裝目錄中:
C:\Users\kai\AppData\Local\Microsoft\AppCertKit
下.找到有一個Global_data.xml文件中打開可以看到:
這個Global.xml包含了每次運行Windows App Certification Kit時全局變量參數和對應的值.類似性能測試出現錯誤可以查找:Performance 則可以明確看到兩個明確在本次測試中 出現PerformanceLaunch_ExecutionTime和PerformanceSuspend_ExecutionTime.兩個參數.即應用程序在此次測試加載和掛起所耗費時間值.當前對應單位是時:分:秒.可以看到對應參數和值如下:
1: <anyType xsi:type="GlobalDataItem">
2: <KeyName>PerformanceLaunch_ExecutionTime</KeyName>
3: <Value>00:00:14.9318050</Value>
4: <Parameter>NONE</Parameter>
5: </anyType>
6: <anyType xsi:type="GlobalDataItem">
7: <KeyName>PerformanceSuspend_ExecutionTime</KeyName>
8: <Value>00:02:39.2459527</Value>
9: <Parameter>NONE</Parameter>
10: </anyType>
可以很明顯看到.本次應用程序在測試Launch時間為14.93秒.遠遠超過Windows 8 規定5秒.
Ps:這個Global.xml文件是當前執行認證流程獲取的值.如果重新運行一次Certifiction Kit則獲得新的應用運行的全局的參數值.
另外因為在認證結果沒有相關錯誤提示.目前我們還無法判斷當前性能問題出在哪.所以你如果想知道認證流程也就是出現這個錯誤過程.你可以再C:\Users\kai\AppData\Local\Microsoft\AppCertKit目錄查看類似logotest_trace_1252013_174027.txt文件,.文件命名默認采用logotest_trace_+測試時間戳.打開可以看到:
這是這次執行認證整個歷程日志Log文件.如果在執行過程出錯.會有明確Error info.信息提示,.出來.很方便知道問題出在哪.所以如果你遇到問題.不知道如何解決.?so. 好好查看一下Log文件.
另外在C:\Users\kai\AppData\Local\Microsoft\AppCertKit文件下還有每次測試單項的測試結果的XML格式文件.類似一次執行可以看到自動生成如下文件:
看基本每一項都有獨立的XML記錄本次數據.這對確認問題來說是最好不過的原材料和素材.
在回到這個問題如何解決.首先在Build我們項目在output看到要訪問的資源. 因為我們發布Windows 8 Game.發現在加載圖片和音樂文件時消耗很大的時間.而且是在應用程序啟動的時候就要播放音樂,查看屬性:
可以看到在Exclued From Build選項設置為No.即每次編輯都會項目重新加載.這就意味每次都需要耗費一定時間等待資源加載成功后用戶才能看到操作主界面.so 把所有圖片和音樂文件的屬性Exclued From Build選項設置為Yes.排除項目資源之外.在來重新運行Certification Kit 發現依然失敗.來看看Global.xml中具體對應的值:
1: <anyType xsi:type="GlobalDataItem">
2: <KeyName>PerformanceLaunch_ExecutionTime</KeyName>
3: <Value>00:00:05.2984610</Value>
4: <Parameter>NONE</Parameter>
5: </anyType>
6: <anyType xsi:type="GlobalDataItem">
7: <KeyName>PerformanceSuspend_ExecutionTime</KeyName>
8: <Value>00:02:12.5057474</Value>
9: <Parameter>NONE</Parameter>
10: </anyType>
可以發現雖然這次依然大於5秒.但相對於第一次運行14.93秒已經大大提升了.可見減少在應用程序Launch時加載資源或更多的操作時一種很有效方式.當減少在launch是一些應用程序操作放到后台時.該驗證錯誤就通過.le
當然在認證時.發現有一個問題需要提示一下.在每次修改應用程序.重新發布本機時.如果原來發布的是Debug版本.建議每次在采用Windows App Certification Kit測試時都要卸載.在最新修改Realse版本包去測試.
如果你在調試過程過程修改多次.依然發現反復測試會提示這個性能Launched超時的問題. 無法通過 首先在App: OnLaunced事件中盡量減少不必要操作.如果是邏輯上無法避免的操作.這里有一個很通用的解決方案來處理這個問題:
通用解決方案:
通常來說.App加載時間指的是App啟動到顯示SplashScreen-到渲染出首頁操作主頁面這段時間. 如果應用的確需要在啟動需要加載一定的操作.通常的做法是第一時間啟動一個和Splashscreen圖片類似的空頁面稍加改動如添加一個進度條/圈,然后再后續進行處理.
這樣做法目的是保證用戶在操作應用不會等待太多時間.如果真的有太多操作.在頁面添加操作進度條.增加用戶體驗即可.這種解決基本是通用的.相信原來做Windows phone也用這種方式處理過這個問題.Windows 8也是如此.
或者在Visual Studio 2012 中.發布測試包方法來驗證該發布包.
在Project > Store > Create App Package中點擊Create App Packages:
選着no.next:
設置本地發布保存地址.當然因為是游戲目前只支持X86版本.點擊Create創建成功后則可以直接看到對當前最新發布包認證:
點擊Launch即可立即驗證.這種做法是為了保證.每次修改后.驗證發布包都是每次在Build之后都是最新.不會因為本地安裝不同版本的包.導致重新驗證.這是比較直接的一種方式.
well說道這里基本涵蓋Windows 8 APP Certification 過程中涵蓋基本錯誤提示和具體的解決方案.當然每個Application照成如上錯誤原因可能是完全不同的.本篇的目的給出具體的解決方案同時能夠提供分析解決這些問題一些思路.希望對Windows 8開發Dev一些參考和幫助.
參考資料:
Performance test failed with unreadable message
Windows App Certification Kit fails on one computer but run one second?
Wack Fail: Application Suspend was not detected for application?