用Qt為Symbian開發(fā)應(yīng)用程序
原創(chuàng)【51CTO譯文】2007年,諾基亞發(fā)布了面向Symbian操作系統(tǒng)的標(biāo)準(zhǔn)C庫。當(dāng)時,我們寫了一篇題為《Open C:為移植鋪平道路》的文章。如今,標(biāo)準(zhǔn)C基礎(chǔ)庫出現(xiàn)在了各大操作系統(tǒng)上。由于標(biāo)準(zhǔn)C庫還出現(xiàn)在Symbian操作系統(tǒng)上,應(yīng)用程序開發(fā)變得容易了許多,跨不同操作系統(tǒng)移植現(xiàn)有的應(yīng)用程序也是如此。
這回,我們不再僅限于跨平臺的標(biāo)準(zhǔn)C庫,而是介紹用Qt為Symbian開發(fā)原生應(yīng)用程序。Qt是一種跨平臺的原生開發(fā)框架,面向所有主要的操作系統(tǒng),包括Linux、Windows、Mac、Symbian和Maemo。本文介紹用Qt為Symbian操作系統(tǒng)開發(fā)應(yīng)用程序以及把應(yīng)用程序部署到諾基亞Ovi商店(Nokia Ovi Store)上。
Qt支持基于Symbian的S60 3.1、3.2、5.0和最新的Symbian^3設(shè)備。如今,Symbian穩(wěn)占全球第一大智能手機(jī)平臺的寶座。我們主要介紹用Qt編寫應(yīng)用程序,并將應(yīng)用程序部署到Ovi商店上。請注意:這里給出的大多數(shù)步驟同樣適用于其他操作系統(tǒng),只不過側(cè)重于Symbian環(huán)境而已。
Qt SDK
開始入手
我們先來看一下開發(fā)人員可以使用的Qt和Qt Mobility API方面的組件。然后,我們會深入探討Qt SDK、集成開發(fā)環(huán)境(IDE):Qt Creator以及模擬器。然后會在模擬器和實際硬件上運行示例代碼。一旦應(yīng)用程序開發(fā)完畢,我們會演示如何對它簽名、部署到Ovi商店上。
Qt SDK是個一體化的安裝包,擁有桌面、Symbian和Maemo/MeeGo等開發(fā)環(huán)境。SDK包括了最新版的Qt框架和IDE:Qt Creator。它旨在提供容易為桌面平臺和移動設(shè)備開發(fā)優(yōu)秀應(yīng)用程序所需要的全部資源。為了進(jìn)一步支持移動開發(fā),Qt SDK包含名叫Qt Mobility API的移動性擴(kuò)展、對設(shè)備上調(diào)試的支持以及能夠在桌面上迅速進(jìn)行移動開發(fā)的Qt模擬器。
跨平臺的庫Qt API包括如下:
•QtCore:其他模塊所用的核心非圖形類
•QtGui:圖形用戶界面(GUI)組件
•QtMultimedia:用于低層多媒體功能的類
•QtNetwork:用于網(wǎng)絡(luò)編程的類
•QtOpenGL:OpenGL支持類
•QtOpenVG:OpenVG支持類
•QtScript:用于評估Qt Script的類
•QtScriptTools:額外的Qt Script組件
•QtSql:用于使用SQL與數(shù)據(jù)庫集成的類
•QtSvg:用于顯示可擴(kuò)展向量圖形(SVG)文件組件的類
•QtWebKit:用于顯示和編輯Web內(nèi)容的類
•QtXml:用于處理XML的類
•QtXmlPatterns:用于XML和自定義數(shù)據(jù)模型的XQuery & XPath引擎
•QtDeclarative:用于說明性地構(gòu)建流暢用戶界面的引擎,又叫Qt Quick/QML
•Phonon:多媒體框架類
•Qt3Support:Qt 3兼容類(這些遺留的支持類在MeeGo和Symbian中不受支持)。
Qt Mobility API包括如下:
•Bearer Management API:用于控制系統(tǒng)的互聯(lián)網(wǎng)連接狀態(tài)的API。
•Camera API:攝像頭設(shè)備得到平臺支持時,提供用于使用攝像頭設(shè)備功能的框架。
•Contacts API:讓客戶機(jī)能夠從本地或遠(yuǎn)程后端請求聯(lián)系人數(shù)據(jù)的API。
•Document Gallery API:讓應(yīng)用程序能夠搜索、過濾和處理本地文件系統(tǒng)中文件的元數(shù)據(jù)。
•Feedback API:讓應(yīng)用程序可以生成觸覺反饋。
•Landmarks API:作為Location API的一部分,它讓應(yīng)用程序可以創(chuàng)建、獲取、更新和刪除地標(biāo)。
•Location API:Location API提供了用于使用任意數(shù)據(jù)源來分發(fā)和接收位置數(shù)據(jù)的庫。
•Maps/Navigation API:提供了用于訪問地圖、地標(biāo)和路線信息以便導(dǎo)航的API。
•Messaging API:Messaging API能夠訪問消息傳遞服務(wù)。
•Multimedia API:提供了用于播放和錄制媒體,管理一大批媒體內(nèi)容的一組API。
•Organizer API:提供了用于創(chuàng)建、更新、刪除和共享各種組織器項目(如事件和待辦事項)的接口。
•Publish and Subscribe API:Publish and Subscribe API含有值空間(Value Space),讓應(yīng)用程序能夠讀取項目值、瀏覽變更通知和訂閱變更通知。
•Service Framework API:讓客戶機(jī)可以發(fā)現(xiàn)任意服務(wù),并為任意服務(wù)創(chuàng)建實例的一組Qt API。
•Sensors API:Sensors API提供了對傳感器的訪問。
•System Information:發(fā)現(xiàn)與系統(tǒng)有關(guān)的信息和能力(capabilities,即權(quán)限)的一組API。
•Versit API:管理vCards等Versit文檔的API。#p#
開發(fā)應(yīng)用程序
在你開始為Symbian開發(fā)基于Qt的應(yīng)用程序之前,建議注冊成為Ovi商店發(fā)布者(Ovi Publisher)。你會得到發(fā)布者編號(UID)、證書安裝工具以及開發(fā)和測試過程中需要的開發(fā)者證書/密鑰對。注冊費僅需1歐元。發(fā)布到Ovi商店不需要另外付費。我們會在本文后面介紹這些概念,到時需要用到這些。想了解更多詳細(xì)內(nèi)容,請參閱網(wǎng)站(尤其要注意發(fā)布者一覽表)。
可以在Qt官網(wǎng)上找到所用的例子(包括所有文件)。我們在這一個例子中使用了基于Qt Quick的例子:簡單的Calculator(該例子在文件夾$QTDIR\demos\declarative\calculator中隨帶Qt本身)。
如果你的應(yīng)用程序不依靠target(目標(biāo))平臺或Qt mobility API,桌面運行庫本身對快速應(yīng)用開發(fā)而言是個很好的選擇。
要是有Qt模擬器,你可以在一種類似設(shè)備環(huán)境的環(huán)境中測試面向移動設(shè)備開發(fā)的Qt應(yīng)用程序。可以更改設(shè)備所擁有的關(guān)于配置和環(huán)境的信息。
在工程模式(Projects mode)下,選擇Qt模擬器,并為該工程指定所需的構(gòu)建和運行設(shè)置(Build and Run Settings)。一旦完成,運行該工程,你會看到該應(yīng)用程序在模擬器中是如何啟動的。
Calculator應(yīng)用程序在模擬器中啟動
QML查看器是個用于裝入QML文檔的應(yīng)用程序,以便快速開發(fā)和調(diào)試QML應(yīng)用程序。它會調(diào)用QML運行庫以裝入QML文檔,還包括了適用于開發(fā)基于QML的應(yīng)用程序的額外功能。
在設(shè)備上構(gòu)建和調(diào)試
一旦你完成了在桌面上測試應(yīng)用程序的工作,就可以開始為設(shè)備構(gòu)建應(yīng)用程序了。不過,在這做一步之前,有必要了解Symbian設(shè)備上的平臺安全到底怎樣。
為了防止執(zhí)行未授權(quán)的應(yīng)用程序,并且保護(hù)最終用戶,Symbian操作系統(tǒng)有平臺安全機(jī)制。對于開發(fā)者來說,這意味著所有應(yīng)用程序在安裝到設(shè)備上之前都需要簽名。簽名既批準(zhǔn)應(yīng)用程序可以安裝到設(shè)備上,又控制應(yīng)用程序?qū)μ囟ㄒ苿釉O(shè)備上數(shù)據(jù)的訪問。許多基本的應(yīng)用程序僅具備可以自簽名以便用于開發(fā)的能力,即所謂的“基本能力”(basic capabilities))。稍后部署商業(yè)應(yīng)用程序需要得到諾基亞的簽名。無論你何時使用要求一項特殊能力的功能,都需要按從左邊文件視圖上可以打開的工程文件(.pro)開發(fā)該能力。在Symbian選項卡下,你應(yīng)該會看到TARGET.CAPABILITY關(guān)鍵字。
在需要受限能力或制造商能力(CommDD、DiskAdmin、NetworkControl、MultimediaDD、AllFiles、TCB或DRM)的情況下,簽名需要完成Symbian簽名,這時需要發(fā)布者編號(要有公司才能獲得發(fā)布者編號)。不過,應(yīng)用程序需要這幾種能力的情況很少見,所以在絕大多數(shù)情況下,可以通過Ovi發(fā)布者計劃來對你的應(yīng)用程序簽名。這是建議采用的方法(因為它是免費的)。
在Calculator例子中,不需要任何特定的能力。
僅僅為了表明在.pro文件中如何指定能力,給出了下列代碼片段,其中指定了Location、NetworkServices和ReadUserData等能力。
- symbian {
- TARGET.CAPABILITY += Location \
- NetworkServices \
- ReadUserData
- }
要證實所需的能力,最佳來源就是Qt和Qt Mobility的參考文檔——分章節(jié)專門記載了諸能力。想了解不同能力的更多信息,請參閱網(wǎng)站。
為設(shè)備而構(gòu)建
選擇Symbian設(shè)備作為目標(biāo)(如圖1所示),然后構(gòu)建應(yīng)用程序。
圖1
在通過USB連接到開發(fā)PC的設(shè)備上運行應(yīng)用程序。Qt Creator會自動檢測到你的諾基亞設(shè)備。可直接從IDE來啟動。運行設(shè)置看起來應(yīng)該像圖2(已從設(shè)備查詢到設(shè)備信息)。
圖2
另外,在運行設(shè)置對話框中,你應(yīng)該在創(chuàng)建SIS包部署對話框中指定從Ovi發(fā)布者計劃獲得的開發(fā)者證書。如果你的應(yīng)用程序需要比基本能力集還要多的能力,就需要這個證書。用開發(fā)者證書簽名的應(yīng)用程序只能用于某一個移動設(shè)備(或一組設(shè)備),總會在安裝時顯示提醒信息:應(yīng)用程序不可信。參閱圖3。
圖3
可以在設(shè)備上調(diào)試應(yīng)用程序。對Symbian設(shè)備來說,這種調(diào)試也得到支持。調(diào)試代理程序必須安裝到設(shè)備上,這一步可以在通過 Qt SDK 菜單把所需運行庫安裝到 Symbian^3 設(shè)備上(安裝TRK調(diào)試代理程序)時同時進(jìn)行。在調(diào)試只出現(xiàn)在設(shè)備中的問題時,這項功能很有用。
創(chuàng)建圖標(biāo)
SVG 1.1圖標(biāo)和SVG 1.1 Tiny圖標(biāo)可以用在Qt應(yīng)用程序中。可以在這里找到關(guān)于如何為Symbian平臺創(chuàng)建圖標(biāo)的一些指南。
一旦你為應(yīng)用程序創(chuàng)建了圖標(biāo),就把下列語句添加到.pro文件中,構(gòu)建應(yīng)用程序。
- Symbian {
- ICON = myicon.svg
- …
- }
你的應(yīng)用程序(UID)
開發(fā)過程中,你可以使用來自介于0xE0000000到0xEFFFFFFF這個范圍的任何UID3。不過部署之前,你要從Ovi發(fā)布計劃獲得合適的UID3。
UID有三種不同類型:UID1、UID2和UID3。UID1定義了二進(jìn)制類型,比如可執(zhí)行文件、庫和數(shù)據(jù)。UID2并不總是用到,因為它以額外信息描述了安裝包。UID3用于以獨特方式識別系統(tǒng)里面的二進(jìn)制文件(EXE或DLL)。
Qt使用工程文件(.pro),用qmake生成針對特定系統(tǒng)的make文件。這些工程文件還攜帶將Qt應(yīng)用程序部署到Symbian設(shè)備上所需的信息。UID3在工程文件(.pro)中進(jìn)行了指定,就像這樣:
- symbian {
- TARGET.UID3 = 0xE0000069 # UID3 which can be used during development. Remember to change
- # this before deployment.
- }
#p#部署應(yīng)用程序
Qt應(yīng)用程序可以在Qvi商店中發(fā)布。面向Qt內(nèi)容的Ovi商店功能已經(jīng)過了測試,能夠用于以下20款諾基亞設(shè)備型號(截至本文完稿時):
•Symbian^3:N8-00、E7-00、C7-00和C6-01(這些設(shè)備交付時隨帶Qt 4.6.3)
•S60第五版:X6-00、C6-00、N97、N97 mini、5800 XpressMusic、5530 XpressMusic、5235、5233、5230和5228
•S60第三版: E72、E71、E66、E63和E52
Nokia Smart Installer for Symbian簡化了將Qt應(yīng)用程序部署到成千上萬Symbian設(shè)備上的任務(wù),就算那些設(shè)備交付時并不隨帶Qt,也是這樣。Smart Installer是個可執(zhí)行程序,與你的Qt應(yīng)用程序捆綁在一起,擁有所需的依賴信息(比如應(yīng)用程序所需的最低Qt版本)。Smart Installer在安裝過程中會檢測是否已安裝了所需的Qt庫;如果已安裝,它就只安裝Qt應(yīng)用程序。不然,Smart Installer會自動下載所需的Qt庫,并把它們安裝到你的設(shè)備上。有了Smart Installer,Qt二進(jìn)制代碼就無需隨同應(yīng)用程序一起分發(fā),因而使安裝包變小了許多,而且更適合通過Ovi商店等渠道來分發(fā)。
使用Smart Installer是強(qiáng)制性的,哪怕基于Symbian^3的諾基亞N8等設(shè)備已預(yù)先安裝了Qt也是這樣。
Qt Creator支持這一功能:自動生成具有Smart Installer功能的包。在工程頁面中,選擇Symbian設(shè)備目標(biāo)和運行設(shè)置,勾選方框“創(chuàng)建Smart Installer包”。
改動應(yīng)用程序.pro文件
主可執(zhí)行文件的UID和應(yīng)用程序.sis文件(myQtApp.sis)的UID必須一樣,必須與Ovi Publish的AppUID字段中指定的UDI相匹配。這將確保一旦應(yīng)用程序安裝完畢,應(yīng)用程序可以在Ovi商店客戶機(jī)里面啟動。
應(yīng)用程序的包文件中的廠商信息必須與你的發(fā)布者名稱相匹配,不得含有Nokia或Vendor。
- symbian {
- TARGET.VENDORID = 0x70000002 # Use vendor ID you will get from Nokia
- …
- }
用Qt SDK創(chuàng)建可安裝文件(SIS文件)
SIS這個縮略語代表軟件安裝腳本(Software Installation Script)。它是面向Symbian OS的歸檔。包文件(.pkg)定義了可安裝sis文件的內(nèi)容。包文件還定義了該包將面向哪個平臺、軟件名稱以及應(yīng)用程序的版本和編號。Qt Creator負(fù)責(zé)創(chuàng)建模板包文件,之后如果你選擇改動模板包文件,就可以改動。
Qt Creator在開發(fā)階段簡化了這一步——如果你想在Symbian設(shè)備上運行應(yīng)用程序,就創(chuàng)建所需的SIS文件(注意:這在最近一個版本的Qt SDK中有了變化——更早些時候,SIS包在構(gòu)建時創(chuàng)建而成)。Qt Creator讓你在為開發(fā)的應(yīng)用程序創(chuàng)建SIS包時,可以使用自簽名證書或自定義證書。
分發(fā)嵌入式包
將應(yīng)用程序(提供了UID的未簽名SIS文件)提交到Ovi商店的收納(intake)工具。測試應(yīng)用程序時將基于諾基亞內(nèi)容和商店準(zhǔn)則、特定運營商的準(zhǔn)則以及Symbian簽名測試標(biāo)準(zhǔn)。如果應(yīng)用程序通過了測試,會得到諾基亞的快速簽名,之后發(fā)布到Ovi商店;你就大功告成了。
【51CTO譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載,合作媒體轉(zhuǎn)載請注明原文出處、作者及51CTO譯者!】
【編輯推薦】