【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应用程序。可以更改设备所拥有的关于配置和环境的信息。
在工程模式(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会自动检测到你的诺基亚设备。可直接从IDE来启动。运行设置看起来应该像图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译者!】
【编辑推荐】