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