搭建Qt 5.3.1 for Windows Phone 8開發環境

來源:互聯網
上載者:User

標籤:qt   行動裝置 App開發   windows phone 8   

搭建Qt 5.3.1 for Windows Phone 8開發環境

 

         目前Qt已經支援了Android以及iOS的開發,我也親自嘗試過在Android和iOS上的開發,其中在Android這一塊研究的較深,也製作出了第一款獨立遊戲《吃藥了》。在Qt的新版本5.3的發布中,官方宣布支援WindowsPhone 8/8.1的開發。過了兩個月了,我也積極嘗試一下,看看使用最新的Qt 5.3.1版本如何搭建WP8的開發環境。

原創文章,反對未聲明的引用。原部落格地址:http://blog.csdn.net/gamesdev/article/details/38568903

1、硬體要求

首先就是硬體了。開發WindowsRT/Windows Phone得天獨厚的優勢是,我的筆記本是64位的系統,CPU是Intel Core i7-4700MQ四核處理器,記憶體容量是4G,且運行Windows 8.1作業系統。一般幾年前的電腦可能無法勝任這樣的開發,因為要支援Windows Phone的開發,CPU必須支援Hyper-V技術。這是微軟提出的虛擬化技術,相當於在Windows 8.1下運行Windows Phone虛擬機器。有關Hyper-V的要求,我查了一下,CPU必須是64位的,並且支援硬體自我保護(DEP)功能,並且已啟動;記憶體最少2G。我的電腦馬馬虎虎滿足需求,所以能夠順利地進行Windows Phone開發了。

2、軟體要求

         首先一個要求,就是安裝Windows8/8.1作業系統。Windows 7究竟可不可以呢?看了網上的文章,可能不行……

其次我看了Qt協助文檔的“Qt forWinRT”主題,瞭解到要支援Windows Phone的開發,需要安裝對應的Visual Studio。對於我們關注的Windows Phone 8/8.1,需要安裝Visual Studio 2012 for Windows Phone。不過現在是什麼時代了,我迫不及待地使用最新版的Visual Studio。於是到這個網站,擷取ed2k資源,開啟迅雷開始高速下載最新版Visual Studio 14。Visual Studio14在安裝的時候有組件的選擇,到時候記得選擇Windows Phone SDK就好了。

         最後Qt是必不可少的,在qt-project.org上下載最新“Qt5.3.1 for Windows RT 32-bit (647 MB)”,然後解壓到合適的位置就行了。

         安裝順序是VisualStudio 14→Qt 5.3.1 for Windows RT。隨後開啟Qt內建的Qt Creator。

3、測試第一個程式

         首先開啟Qt Creator,也就是附帶在Qt5.3.1上的IDE。建立一個QML項目,設定構建套件,如下:

         產生好的代碼如下所示,這裡稍作了一些修改:

         我這裡首先使用案頭的套件構建一下,結果如下所示:

         一切正常。

4、開始移植Windows Phone 8

         接下來我將嘗試將例子程式移植到Windows Phone 8中。如第一張圖所示,我們可以選擇實體機套件以及模擬器(Emulator)套件。對於沒有實體機的同行們來說只能選擇Emulator了。當我們按照正常步驟,構建,再運行時,會彈出Windows Phone虛擬機器,看起來一切正常:

         但是這裡有一個坑。過一會兒程式啟動後會變得空白一片:

下面也會彈出

qt.winrtrunner:"E:/QtProject/build-TestQuickForWinPhone8-Qt_5_3_for_Windows_Phone_8_x86_MSVC2012_32bit_Emulator-Release/release/AppxManifest.xml"does not exist.

qt.winrtrunner:"E:/QtProject/build-TestQuickForWinPhone8-Qt_5_3_for_Windows_Phone_8_x86_MSVC2012_32bit_Emulator-Release/release/AppxManifest.xml"does not exist.

這樣的紅字。後面瞭解到這個問題不影響的。只是我們如何才能顯示程式呢?

5、介面,你快回來

         “Qt for WinRT”這篇文章講到了,我們在測試的時候,Qt會提供一個小工具,叫qd3dservice。它可以即時地將著色器編譯並呈現給應用程式。因為作為支援Qt渲染的OpenGL,在遇上微軟的手機後,不得不“改頭換面”,披著Direct3D的外衣來“見”Windows Phone 8手機。於是需要通過Google Code中一個項目ANGLE,將OpenGL ES2.0的著色器代碼轉換成D3D著色器。剛才無法顯示介面,原因是作為介面依賴的著色器沒有被載入。

         解決方案也很簡單,在QtSDK的bin目錄下運行不帶參數的qtd3dservice就行了。然後再開啟我們編譯的程式:

這樣稍微好一點了,至少我們看到了介面,可是一大堆方塊又讓我們犯愁了。這又是一個坑那麼如何才能讓我們看到文字呢?

6、文字,你快回來

         看了看Qt 5.3.1for Windows Phone的目錄結構,一個顯著的不同是在bin和lib檔案夾中都有一個名為“font”的目錄,這個目錄是存放與介面顯示相關的字型的。預設打包的時候會包含這些字型。等等,我們剛剛就這樣運行程式,可是沒有進行打包啊。那麼如何進行打包呢?這還得靠我們剛剛安裝的VS14。首先定位$${YourProjectDirctory}中,開啟命令提示字元,輸入:

$${QTDIR}/5.3/winphone_x86/bin/qmake -tp vcYourProject.pro "CONFIG+=windeployqt"

我這裡是這樣的:

       運行後,發現uuidgen找不到。這又是一個坑。開始我儘力地去尋找uuidgen.exe,甚至去網上下載了一個uuidgen.exe,並且放在了C:/Windows/system32中,結果都沒有起作用!所以說這又是一個坑。不過這個錯誤並不影響這一步操作,一些必要的Qt和VS專案檔也能夠順利產生。

         此時用VS14開啟產生的vcxproj檔案。如下所示:

此時點擊deploy,試試看。結果報錯!

C:\Program Files(x86)\MSBuild\Microsoft\WindowsPhone\v8.0\Microsoft.Phone.Packaging.targets(637,9):error : The ‘ProductID‘ attribute is invalid - The value ‘{}‘ is invalidaccording to its datatype ‘http://WPCommontypes:ST_Guid‘ - The Patternconstraint failed.

這就是uuidgen坑人的地方了。因為無法產生ProductID,所以無法部署打包。

         當物之急就是能夠找到產生uuid的方法。這裡有好幾種方法。

(1)      VS中有一個叫guidgen.exe的工具,和uuidgen只差一個字母。可以用它來產生uuid;

(2)      去網上下載uuidgen.exe,那是1996年微軟的老物了,但在命令符下仍然能夠產生uuid;

(3)      大家都有Chrome瀏覽器吧,教大家如何使用Chrome產生uuid。事實上任何js解譯器環境都可以,包括QML Engine。開啟Chrome,Ctrl + Shift + J,開啟JS控制台,然後輸入下面的JS代碼:

function getGUID( ){function _p8(s) {var p = (Math.random().toString(16)+"000000000").substr(2,8);return s ? "-" + p.substr(0,4) + "-" + p.substr(4,4) : p ;}return _p8() + _p8(true) + _p8(true) + _p8();}getGUID( );

斷行符號,就能夠產生一個合法的uuid了。這裡我產生的uuid是:

684cebbf-bb4a-857b-9a1e-746feb967cd3

我們需要做的是,進入項目目錄,編輯WMAppManifest.xml,找到ProductID欄位,將我們產生的uuid放在大括弧裡面,儲存,這樣就好了。

         然後進入VS14,點擊deploy,然後Ctrl + F5全速運行。記得在運行之前運行qtd3dservice。運行結果如下所示:

         大功告成!經過兩天的嘗試和提問,我終於能夠在Windows Phone上面成功地運行Qt程式了。有關Windows Phone上面更多開發方面的問題,有時間我會研究的。

7、總結

         這裡作一個小小的總結:

1、  Windows Phone應用安裝包的尾碼是.xap檔案,可以用7-zip等壓縮解壓工具開啟,開啟後發現和Android的apk安裝包的目錄結構大同小異。

2、  如上面介紹,用Qt開發WindowsPhone 8還存在很多坑,再比如說這個例子,想點擊左上方的File菜單,就不靈敏,有時候Exit選項會獨佔整個螢幕,顯得這個螢幕很空;此外,一些重要的Qt模組比如說我迫切需要的Enginio,並沒有一併移植過來。所以說開發Windows Phone 8應用還是實驗性的,希望在Qt 5.4中能夠做得更好。

3、  如果不希望每次啟動qtd3dservice線上編譯著色器,那麼可以使用“qtd3dservice --list-binary --qrc --device 0 --app {684cebbf-bb4a-857b-9a1e-746feb967cd3}--output /path/to/project/shaders.qrc”來產生shader資源,然後再修改pro檔案,添加這一行:“RESOURCES+= shaders.qrc”,最後重新編譯打包。

4、  其實qtd3dservice只是一個初步可行的辦法,當時考慮Windows的政策不允許JIT編譯。我在jira上看到Qt團隊討論的結果是,qtd3dservice將在Qt5.4中移除。因為(1)Windows 8.1支援裝置線上(JIT)著色器的編譯;(2)qtd3dservice只是一個實驗性的解決方案,以後不必維護;(3)可以使用scene-graph採取的cache方法來應用到著色器當中。(參考這裡)

5、  即使使用了Hyper-V技術,在模擬器上體驗WindowsPhone 8的效果還是比不上真機。我曾經在蘇寧電器城中使用諾基亞Lumia 525成功運行Digia的Qt應用Quick Forcast。有條件的話,還是買一台真機進行開發測試吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.