1 简介与写作初衷
Frank H.P. Fitzek, Tony Torp and Tommi Mikkonen
本章对Qt和Symbian平台的结合进行了简要的介绍,阐述了这种结合方式的原因;还将强调在移动通信系统中,移动开发的重要性,以及选择Qt作为Symbian平台编程工具的原因。解释了为什么对于各个层次的开发人员来说,使用Qt在Symbian平台编程是一种和好的办法,这些开发人员从新手到专家可以使用Symbian平台的全部功能,享受Qt与其跨平台功能实现轻松编程的乐趣。
1.1 移动开发的重要性
在20世纪90年代移动电话广泛受到欢迎时,大家便提出这样的问题:移动电话在话音服务之后会出现什么服务呢?此时,只有少数的手机是可编程的,所以只有网络和服务运营商去思考未来的主要应用---这是一个误解,一个单一的应用程序可以像以前移动语音服务那样吸引人们的注意。过了一段时间人们才意识到:不是单一的应用程序,而是系列的复杂的应用,如游戏、公用服务、医疗服务等,将是吸引更多的客户的唯一办法。此外,手机制造商普遍认识到,不仅是网络服务商能同手机制造商一起开发全新而有吸引力的服务,移动用户也可以开发大部分的服务。或者,因为不是所有的移动用户能够编程,至少其中一个部分可以开发。我们把这些用户成为移动开发人员。
手机制造商之所以如此热衷于增加他们的开发人员基础是因为不同设备制造商的设备在设计、用户友好交互、键盘的服务上的差异比纯技术要多。因此,厂商会关注设计和移动应用的一些基本设置,以及开发商提供的其他服务会。为了使客户在自己的设备上安装新的应用程序,厂商提供许多将移动应用推向市场的新渠道,诺基亚和Ovi,苹果与苹果商店, RIM,三星以及谷歌都计划在将来进行合作。
图1.1 开发人员的需求
这样的市场对于允许移动电话用户安装需要的应用程序很重要,而且对于移动开发商来讲也意义重大。
移动开发人员有多种编程语言和编程的平台。问题是如何提供一个编程环境,这个环境既便于移动开发人员使用(易学性),又具有使用移动电话的所有功能的灵活性(灵活性),还能保证所编写的代码能在平台上高效运行(高效性)。目前有了一个对于易学(学习一种语言所花的时间)、灵活性和高效性(什么平台容易获取)有了一个折衷方案。从开发者的角度来看,如果仅仅立足于为大众市场,就有长期的问题时。如果你想取得很多用户,开发的应用就需要支持大量的手机类型。如今,编程环境的独立,使得移动应用程序的需要为个人的手机电话或部分人的手机量身定做。尽管Java宣称一次编码各处运行,但也存在这种情况。目前Java应用程序需要在每一个移动电话上测试,以确保能够运行。由于这样花费时间长,所以需要一种跨平台的策略,它能够减少不同设备上的测试时间。因此,如图1.1所示,这种编程环境要灵活、易学、高效,同时还要支持跨平台开发。
从移动开发商的角度来看,可编程移动电话的推出意味着服务的大门已被打开,他们一直都想提供这些服务,并且认为大众市场也会愿意购买这些服务。最初的移动应用程序产生于游戏领域,它是基于Java开发的。因此,它们只能在初级版本的Java移动手机使用,这种手机本质上只提供了程序运行的基础(sand box)和有限的部分接口。由于一些限制,并非所有的移动电话功能都可以使用。例如,由于用户的个人数据在早期的Java移动电话中出于安全原因无法访问,早期的应用程序是独立运行的,它们可以在一些基础上轻松运行,比如游戏、日历、电话薄等,这些程序不需要同手机的其他功能相联系。
随着Symbian平台及其程序设计语言Symbian C++的引入,程序开发者有了更大的自由度,因为更多的手机功能可供开发者使用。手机程序开发者还可以使用短距离技术(如红外技术或蓝牙技术)实现手机之间的数据交换,或者同手机的内置设备进行交互。最初的应用之一是检查匹配用户配置文件的检测客户端,它能在匹配的情况下发出报告。此外,使用'移动运营商的网络的IP网络连接也可以实现。除此之外,Symbian还具有使用本地代码的技术优势。因此使用Symbian C++编写的应用程序花费较少的资源并且比其它方案运行更快。
另一方面,然而同其它编程语言和系统相比,Symbian C++也有一个比较大的缺点。作为一个C + +的扩展和复杂的应用程序框架,对于大量移动开发者而言适应难度较大。因此,由于学习Symbian C++很难,使得真正的Symbian C++开发者的数量比Java开发者来讲相对较少。为了使手机开发者能够更容易的学习Symbian系统,人们也做了许多尝试。
为了使Symbian平台对大量开发者更加开放,诺基亚针对S60(S60是仅仅是在Symbian平台子集)推出了Python。它作为开放资源,可以在网站下载。
http://opensource.nokia.com/projects/pythonfors60/
它使用Python编程语言,扩展了S60平台。有了这些的条件,开发人员可以进行快速应用程序开发和原型设计,并可以使用Python编程语言创建独立的S60应用程序。使用简单易学的Python脚本语言,从没有编程的人甚至也能够编写自己写脚本,实现自己的想法。然而,Python语言的编译程序不是手机设备现成提供的,必须要进行安装以后,这反而导致使用Python时安装的麻烦。这可能会降低一些用户的积极性,他们想使用快速的应用程序不安装额外的程序。对于S60平台的Python编程,读者可以进一步参考Scheible、Tuulos(2007)和Scheible(2010年)。
另一种使开发者轻松的尝试就是诺基亚的开放C/C++(2010年)。开放C/C++提供了大量的标准的C和C + +的API(应用程序接口)。他们的目的是将桌面应用程序移植到Symbian设备上。此外,他们对于基于已经存在的组件开发应用引擎和中间件也很有帮助。总的来讲,开放C/C++使得已有的软件资源和开源组件得以重复使用。开放的C/C++允许使用现成的C或C + +代码,而不是使用一种脚本语言,这些代码可以是与手机相关的功能库。这种方法解决了一些Symbian开发的问题,但存在对用户界面编码的问题。
Symbian的最新方法是基于Qt的Symbian编程,它具有了上面所提到的四个基本特征-易学,灵活,跨平台开发环境以及开发的高效性。该平台的目标是让开发者进入大型的移动开发小组。对于Qt与Symbian的结合,主要是由于Qt是一个跨平台的应用框架,这使得一些应用程序可以一次编写就能在许多操作系统上使用,而不需要重新编写源代码。并且,Symbian平台的底层通过提供手机的所有功能确保了最大可能的灵活。Qt的开发是基于C++语言的。此外,Qt的API可以跨平台使用的功能,而且大家普遍认为它易学、好用。Qt的API比Symbian的API具有更高层次的抽象。从开发者的角度来讲,Symbian的复杂性已被Qt通过接口隐藏起来,这意味着开发变得更简单,开发者可以更快的完成。因此,作者认为本书的主题比较合适,希望后续的章节将有助于开发人员在Symbian平台进行Qt编程的入门。
本章对Symbian和Qt进行了简要介绍,本章的其余部分提供了一个简短的开场白,的,包括特殊的原理,不要求读者一一阅读。主要是使读者对于两种技术有一个基本的了解,进一步阅读将了解更多。
1.2 Symbian操作系统
Symbian OS(Symbian操作系统)是一个领先的移动开发平台,在移动电话中广泛
的应用。依托C++语言,微内核,面向对象设计中广泛的使用,它促进了大量设备的发展,
并产生了Symbian平台,它在今天的智能手机中广泛的使用。Symbian操作系统的起源可
以追溯到20世纪90年代和Psion移动设备。作为当时水平的代表,以今天的标准来看,Psion公司的设备在性能和能力方面都一般,Symbian操作系统支持移动电话新功能的能力对初期的设计者来讲是一种贡献。从Psion公司设备操作系统到Symbian平台的过程——当前最主流的Symbian环境——经历了许多阶段,从它在Psion公司起源到新成立的Symbian基金会。
Symbian操作系统起源于对Psion公司的PLC设计,特别是SIBO,或EPOC16,它们是基于C语言的,后来EPOC32,这是后来所讲的Symbian。该公司也在开发相关的软件开发工具包,用于第三方应用开发,它在智能手机平台的下一步应用十分重要,现在已经开始实施。
Symbian公司,也就是我们今天所知的Symbian操作系统的大本营,已于1998年成立,它主要开发的智能手机移动平台。开始属于许多主要的移动设备公司——爱立信,松下,摩托罗拉,诺基亚和Psion——Symbian操作系统的目标是给2.5G和3G手机的制造商授权,它许多的知识产权源于Psion公司的PLC。发展模式是,Symbian公司专注于核心的Symbian操作系统及主要框架,而被授权者则针对不同的Symbian系统,包括许多类似手机设备的Symbian系统,开始是基于触摸屏的用户界面交流(UIQ)。
Symbian基金会由移动通信行业的主要公司,包括诺基亚,索尼爱立信,摩托罗拉和NTT DOCOMO,于2008年6月24日宣布成立。该基金会致力于开发全球最成熟、开放和完整的移动软件平台。在技术方面,的将Symbian操作系统、S60、UIQ和MOAP(S)统一为一个融合了各种移动设备的开源平台。
1.2.1 Symbian——技术
Symbian操作系统的设计深刻的反映它上的起源。这一操作系统,是专门为普通具有有限内存和资源的系统所设计。按照20世纪90年代的情况所设计。最具特色的设计决策如下。
Symbian操作系统是基于微内核架构。微内核通常指,资源管理器以不同的进程访问底层的硬件,操作系统只是处理中断和安排任务调度。此外,微内核经常使用消息传递机制,这使得资源管理器同内核提供的工具可以通信交流。Symbian操作系统设计,引入微内核是一个重要的目标。
微内核的使用引发了对特殊软件组件的定义,其目的是管理不同类型的资源。在微内核中,这样的资源管理被称为服务器。系统每个资源被封装成一个服务器,负责管理资源。当资源被使用时,客户端先同服务器通信,然后同与服务器建立会话。在建立会话后,客户端可以使用服务器提供的资源和服务。此外,错误管理纳入该系统中。如果服务器被故障,错误信息被传递给客户,如果客户故障,服务器应该能够释放分配的资源。
Symbian操作系统设计是广泛的基于面向对象编程。对于不同的任务有大量的框架,包括应用程序开发(应用框架)和一般事件处理(活动对象),它们都将涉及以下内容。
后者同资源管理相关,也就是服务器,资源管理器使用消息与客户沟通,它接收一个资源请求就是一个事件。此外,由于在大多数的Symbian操作系统中可以使用的C++编程工具,在设计时不太方便,许多工具被引入来解决这个问题。随着时间的推移,对现有C++系统的改善也原则上使这些工具失去作用,但去除实际的代码库比较困难。
1.2.2 Symbian——主流智能手机平台的发展
同其它长期存在的操作系统一样,硬件的多样化要求Symbian操作系统的许多部分要进行重新设计。由于Symbian操作系统主要是用于智能手机,自然的,手机设备的发展成为了操作系统发展的动力。Symbian操作系统的主要变化至少应包括以下几个方面:
硬件设备已经发生了根本性变化。原来Psion公司设备依靠RAM磁盘,它的反应快。但在写入磁盘时需要一个单独的备份。然而,手机设备通常使用快速的磁盘。由于闪存物理特性,文件需要及时更新。
不同手机设备的内存数量在大大增加。事实上,几百兆内存和几百GB的硬盘已经十分普遍了。当第一部基于Symbian操作系统的手机被引入时,这是21世纪初期的主要技术进步。因此,关于内存使用的考虑就没有必要了,尽管这在早期Symbian手机中是必须的,特别是编写应用程序的时候。然而,对于手机制造商,但是,这些问题还有必要考虑。
内存增加的同时,处理能力得到了改善。除了时钟频率的增加,越来越多的具有处理能力的外设也出现了。在一般情况下,Symbian的基于微内核的方法是非常适合的,但不同的扩展明显需要将它们基于Symbian OS进行融合。
目前,可以连接到手机的子系统数量有所增加。与此同时,各个子系统已经变得日益复杂。因此,他们的在将所有这些支持的累积效应,对于众多子系统的支持增加了Symbian操作系统的复杂性。例如,Symbian操作系统和底层硬件资源的交互接口已从原来只由几个服务演变为一个复杂的框架,其中一个插件架构用来适应在不同的硬件组件的变化。
平台的安全性引入需要对Symbian操作系统进行大范围的重新设计。因此,这一阶段还是对Symbian操作系统发展的影响是标志性的。对于应用程序开发,这也意味着严重违反了不同设备之间的兼容性,更不用提双重的兼容性。
Symbian操作系统应对以上问题的能力,对于维持基于早期操作系统内核的设计作用重大。特别是,微内核架构已经被证明是一个灵活的平台,这一平台能够应对各种复杂的应用程序,并服务器上的嵌入式资源已经提供了一个用于管理手机越来越多新资源的方法。弊端就是,该平台的发展对于偶然的开发者不利,尤其是不断变化的程序说明书上。
1.2.3 Symbian——偶然的应用程序开发者
虽然Symbian操作系统的程序已经改善了,但对于一个偶然进行开发程序员来讲,Symbian操作系统的程序仍然存在一些困难。这些困难同两个特殊的设计选择相关: 一是Symbian应用程序架构,它是使用图形用户界面开发应用程序的基础。二是一些平台特殊的细节,这应用程序开发者视为多余的复杂性。这对于偶尔开发基于Symbian操作系统的应用程序来讲十分难受。除了Python和开放的C/C++,基于Qt的Symbian编程是一个很好的解决方案。Qt是一个跨平台的应用开发框架,它广泛适用于开发使用GUI程序。虽然通常和GUI编程有关,该系统也还包括许多其他组件,如线程和子系统的连接,比如SQL数据库和XML解析。Qt的内部是基于C + +,但它通过附加的预处理器实现了一些非标准扩展,其中,它们也生成标准的C + +代码。Qt可以在所有主要平台上运行,而且支持国际化。
图1.2 Qt发展历程:一次编程多平台使用
1.3 Qt
Qt(发音为cute)是QtSoftware产品,最初被命名奇趣(成立于1994年)。在最初建立一个的面向对象的演示系统想法的基础上,初始版本于1993年,奇趣科技成立于一年后在挪威成立。1995年5月20日,首次以公开的名义推出的版本为Qt 0.9。这个名字来自哈佛Emacs编辑器中的Q字母和XT技术,见Yrvin(2010)。在过去的几年Qt一直为谷歌,Skype公司,沃尔沃等等众多的客户所使用。
1.3.1跨平台开发环境
Qt的背后的主要想法是在C++或Java一次编写应用程序,便可将其部署在多个桌面和嵌入式操作系统上,而毫不改变原代码(见图1.2)。从开发者角度来看,支持的Qt应用程序接口(API)同各种支持的平台保持一致,它使软件的开发人员只使用通用API和而不使用特定于设备的接口,如只在手机设备提供的接口。此外,同样的工具链对于支持类似的开发不同的计算机系统也同样可用,这使得不同环境下的不同工具链的效率有了提高。
除了相同的API外,在使用Qt编写的应用程序要像给定平台自身内部的程序一样,以确保用户友好性——即适合的外观和感觉。图1.3展示了多平台的Qt按钮。同Java的Swing模块不同,它可能也可以跨平台运行,用户交互界面外观也相同,这可能会给习惯一个给定应用程序处理的用户带来不便。Qt提供了一个直观的类库和集成开发工具,它们支持C++和Java开发。除了应用程序接口(APIs)和交叉编译支持外,更重要的是,有许多支持Qt开发工具,如介绍了Qt设计者(Qt Designer)或Qt语言学家(Qt Linguist)。
1.3.2 Qt手机领域应用
Qt开始只是针对Windows操作系统、苹果操作系统(从Qt 3.0开始)和Linux系统。然而,由于其极具吸引力,在2000年时它就很快扩展到了许多嵌入式系统中。最终,在2006年奇趣科技推出了Greenphone手机,它是一个基于Linux的全功能移动电话,(见图1.4a)。
图1.3 Qt的多平台感官
图1.4(a)Greenphone手机 图1.4(b)Greenphone手机用户界面
Greenphone现在已有了触摸屏和许多无线接口。图1.4b给出了Greenphone的用户界面。诺基亚在2008年接管了奇趣科技的Qt,并从Symbian平台和Linux平台开始,将其引入到自己的平台中。利用这项技术,诺基亚建立了一个大型而灵活的编程社区。但是,由于利弊同存,除了现有的Java、Symbian C++、Python或Flash编程语言,Qt及其手机设备的工具链的引入将减少编写手机应用程序的障碍。
Qt的版本已经广泛发布—涵盖了桌面和手机领域。在手机领域Qt可用于Linux的设备,而且诺基亚公司已将Qt推向了Symbian平台。为了使Qt全面的使用手机功能,比如那些桌面领域中没有的,也需要推出新的Symbian应用程序接口。这些应用程序接口是负责使用定位信息、手机短信(如短信和彩信)、相机,内置传感器和其它功能。当然,在不使用新的应用程序接口的情况下也可以编写基于Symbian平台的手机程序。但显然基于这些应用程序接口可以开发实际的手机程序,包括基于定位的服务、移动社交网络和许多其他程序。
图1.5 Qt不同手机平台上的跨平台能力
图1.5说明了Qt软件在不同平台的适用性。只要唯一使用的Qt语言写,代码应该可以在任何平台上运行,包括台式机、笔记本电脑、诺基亚的各个系统和任何第三方手机设备。另一方面,Symbian的应用程序接口只能用于Symbian平台,在以后可能会扩展到诺基亚的各个系统。这种做法是类似于Qt的嵌入式方法,其中,比如电话相关日历、联系人或近距离无线蓝牙都限于嵌入式环境。
表1.1 Qt许可协议
| 商业版本 | LGPL版本 | GPL版本 |
协议费用 | 收费 | 免费 | 免费 |
转换为Qt必须提供原 代码
| 否,不需多余源码 | 需要提供源码 | 需要提供源码 |
可以编写单独 的应用程序 | 是,无需源码 | 是,同LGPL 2.1版一致 | 否,应用程序必需基于GPL且有源代码 |
提供更新 | 是,有固定维护 | 否,自由发放 | 否,自由发放 |
支持 | 是,自由发放 | 否,需单独购买 | 否,需单独购买 |
使用收费 | 是 | 否 | 否 |
1.3.3 Qt授权
对于移动开发最重要的问题是许可协议。Qt是提供不同授权模式。商业版和GPL版本开始就可以获得,LGPL版是最近才增加的。后者使得应用程序开发者可以没有公开源代码的情况下编写应用程序。Qt是遵循下列协议:
Qt的商业版:该版本适合开发个人软件或商业软件。适合于那些不希望共享源代码的人员,开发人员遵守GNU用公共条款,除了GNU GPL 2.1版或GNU GPL 3.0版。
Qt GNU LGPL 2.1版:该版本适合Qt应用程序的开发(私有或开放源码)的人员,开发人员可以遵守的条款及条件,包含在GNU LGPL版本2.1。
Qt GNU GPL 3.0版:该版本适合希望结合GNU GP软件编程的人员。并且愿意遵守的GNU GPL 3.0版本条款。
在表1.1是许可协议间的相互相互比较。
参考书目:
诺基亚F2010开放C和C++.
http://www.forum.nokia.com/Resources_and_Information/Explore/Runtime_Platforms/Open_C_and_C + + /。
Python的S60Scheible J 2010教程: http://www.mobilenin.com/pys60/menu.htm。
Scheible J和Tuulos V 2007手机Python:手机的快速编程。约翰Wiley&Sons出版公司
Yrvin K 2010年的Qt介绍:口头报告材料。