symbian系统开发教程(一)第一章:SymbianOS简介作者:谢兴enigma19971@hotmail.com1.1.Symbian系统简介当前有很多手机运行SymbianOS,数量甚至超出您的想象。到目前为止已经有超过7500万、100多种型号的手机运行SymbianOS。这些电话大部分都形态迥异:有的配有键盘,有的采用笔控输入;有的配备TFT彩色屏幕,有的则配备黑白LCD显示屏;有的擅长于音乐播放,有的专注于电子游戏、图像处理甚至电视功能;有的手机面向个人消费者,有的专门针对商务用户;有的是为单手操作设计的,有的是为双手操作设计的——种类繁多不一而足。SymbianOS手机受到广大消费者的喜爱。仅2005年就售出3400万部SymbianOS手机——这相当于每不到一秒钟就有一部SymbianOS手机被出售。网络运行商同样青睐SymbianOS手机。全球有250多个移动电话网络运行商选择了SymbianOS手机。所有这些都表明现在市面上有成千上万的手机是基于SymbianOS的,所以为symbian系统开发的应用程序会得到广泛的应用。现在已经有5400多种商业性应用软件可供SymbianOS手机应用。本教程旨在为您提供一些编写SymbianOS应用程序的入门知识。希望它会对您有所裨益,为开发SymbianOS应用程序打下一个良好的基础。1.2.开发语言从开发初期起,SymbianOS就是专门为移动电话而设计的,因此从弹性的电源管理(resilientpower-management)到内存资源的谨慎使用,全都是为了满足手机操作系统的特定需求。作为SymbianOS的开发人员,您将受益于SymbianOS这样一个专门为移动设备而创立并随着市场一起发展的开发平台。SymbianOS最“基本”的编程语言是一种改进的C++。SymbianOSC++经过特殊设计与优化,以利于降低手机电池能耗和内存使用。比如,为了节约电池耗电,所有SymbianOS程序都是基于事件(event-based)的,而当没有任何程序进行事件处理时,CPU就进入休眠。您在开发软件时也可以使用Java、Python、.NET(使用VisualBasic和带AppForge’sCrossfire的C#)、Perl、OPL和AdobeFlash,但是SymbianOSC++是最强大(它允许最大限度的利用操作系统提供的所有功能)也是最快捷(因为它直接以编译码运行,而无需在运行时进行解译)的语言。这也就是为什么我们在本书中选择C++来向您演示如何进行SymbianOS开发的原因。好了,闲言少叙,让我们言归正传。1.3.准备工作首先您需要有一台电脑能创建并测试在SymbianOS手机上运行的应用程序。这也就是说电脑要有一个较快的CPU处理器(至少1.5GHz)和相当大的RAM(512MB或更大)以及一个大容量硬盘(至少有2GB剩余空间)。该电脑必须能运行Windows2000或XP操作系统。然后您需要开发软件来帮助您编写代码并进行编译。这可通过包含编辑程序(editor)、编译程序(compiler)和链接程序(linker)的集成开发环境(IDE)来完成。在这推荐两种适合SymbianOS程序开发的IDE。对于开发非商业用途的SymbianOS应用程序,Nokia的Carbide.c++Express版本是最理想不过了,它建立在EclipseIDE的基础上,供免费下载。对于使用VisualStudio.NET2003的程序员来说,也可选择Carbide.vs。这是一套基于MicrosoftVisualStudio.NET2003IDE的工具,用于开发S60和Series80软件。您还需要软件开发包(SDK),专门用来编写和创建SymbianOS应用程序。基于不同手机类型,有不同版本的SDK供选择,具体使用哪个SDK请见以下几页的说明。如果您还没有决定具体的手机类型或平台而无法确定选择哪个SDK,我们建议您一开始可使用S60和UIQSDK。如果您想为最新款的手机(如Nokia3250、E60、E61、N71、N80、N91、N73或N93)编写应用程序,那就选择基于SymbianOSv9的SDK(UIQ3或S60第三版),要么您就选择更低版本的SDK(UIQ2.1或S60第二版)。不同版本的SymbianOS之间有什么区别?主要的分别是,在SymbianOS9.1版本之前,为较低版本的SymbianOS编写的软件往往可在较高版本上运行,但9.1版本与以往的版本截然不同。如要运行在9.1版的SymbianOS上,应用程序必须稍加修改并进行再次编译。接下来您需要下载您所选择的IDE和SDK。以下章节将向您介绍如何在互联网上找到这些工具。1.4.S60平台S60平台是一个完整的应用程序包(package),用户接口和构建于Symbian系统技术的开发工具。S60用户接口(UI)经过精心的设计,方便用户使用,便于单手操作。从用户的角度看来,该平台最大的特点在于它的用户界面:大的彩屏和各种输入键(两个软件键,五方位的导航键,和几个专用的键)。单手操作和大彩屏的优点能使应用程序开发者提供更有吸引力的内容和提供更方便的导航功能,同时增加用户使用手机时的愉快体验。目前,s60平台上已经存在各种各样的应用软件.其中最重要的有:高级智能电话应用程序,个人信息管理应用程序(PIM)(例如,电话簿,日历,相册),短信,网页浏览,电子邮件和应用程序安装引擎,它能够让您自由地从电脑上下载软件到您的手机上。S60第三版本支持两种不同的外观:ØQVGAPortrait(240x320)ØQVGALandscape(320x240)1.5.如何选择SDK基于SymbianOS的手机外型各异,用户界面(UI)也不尽相同。为了给特定的用户界面编写应用程序,您必须选择特定的SDK(尽管应用程序的引擎往往与用户界面无关)。大部分运行SymbianOS的手机采用的是S60用户界面并使用键盘操作。S60已经发布了一系列版本,选择正确的S60SDK和相应的SymbianOS十分重要:S60第三版–SymbianOSv9.1S60第二版功能包3–SymbianOSv8.1S60第二版功能包2–SymbianOSv8.0aS60第二版功能包1–升级SymbianOSv7.0sS60第二版–SymbianOSv7.0sS60第一版–SymbianOSv6.1您可在以下网站查到每一系列S60SDK所包含的手机型号列表:www.symbian.com/developer/sdks/sdks_series60.asp其它大部分基于SymbianOS的手机采用笔控输入的UIQ用户界面。以下网站列出了基于各版本的UIQSDK的手机机型www.symbian.com/developer/sdks/sdks_uiq.asp您可以到以Nokia的网站下载SDKwww.forum.nokia.com1.6.Carbide.c++集成开发环境(IDE)前面已经提到了各种集成开发环境,这里我们主要介绍Carbide.c++的集成开发环境。Carbide.c++的集成开发环境(IDE)基于Eclipse集成开发环境版本3。增添了能使Eclipse处理symbianc++源文件和编译Symbian工程的插件。这些插件分为以下几类:ØC/C++开发工具箱(CDT)。这是一个使得Eclipse管理和编译symbian工程的工具集ØSymbian插件。这些插件由symbian开发,使得eclipse能够处理EclipseC++的概念,同时提供对Symbian操作系统软件开发工具箱和Symbian工具链的支持。ØNokia插件。由Nokia开发,提供对Symbian操作系统工具箱的更多支持。插件实现了C++编译器,symbian系统的调试器,并且加入了Carbide.c++系列产品的商业版本的高级特性。很明显,因为Carbide.c++是基本的Eclipse集成开发环境,开发者可以进一步定制其它的商业或免费的插件,比如说,一个版本控制系统,一个UML建模系统等。Carbide.c++有自己的安装程序,所以安装比较简单。在启动这个产品之后,用户看到的集成开发环境和Eclipse开发环境十分类似,如下图所示,因为Carbide.c++是设计用于处理symbianc++应用程序的,所以其集成开发环境的左边显示的是c/c++工程视图,这个视图用于显示构成一个典型symbianc++工程源文件、头文件,资源文件。关于eclipse平台和插件的相关知识,不是本教程所关心的重点,有兴趣的读者可参考相关的其他著述。1.7.开发环境的构建Ø第一步:安装JDK5.0Ø第二步:安装ActivePerl(需要5.6.1以上版本)Ø第三步:安装SymbiansdkØ第三步:安装Carbide.c++1.2版本。Carbide有不同的版本。其中Express版本是免费安装的,但不支持UI设计功能,也不支持在手机上调试的功能。注意:这几个文件需要放在一个目录下面。否则,在编译程序的过程中,可能会出现难以预料的错误。1.8.文件目录的布局在动手写代码之前,我们有必要了解工程的文件组织结构。如果您看过SDK中的例子工程,或是用IDE的工程向导创建一个UI应用程序,您就会了解一个典型的工程文件结构布局是怎样的。当工程增长到一定程度的时候,好的文件目录布局将有助于帮助跟踪代码的变更。工程中包含了各种不同类型的文件,包括源文件和其他类型的文件,我们通常将这些文件分开来存放,下面我们简短地介绍这些文件。资源文件,例如.bmp或.wav文件,通常被单独地存放在一个目录下面。测试代码也会和产品代码分开来存放。所以,一个典型的UI应用程序会有如下这样一些目录结构和文件。文件目录存放文件类型data(S60)存放资源规格文件(.rss)Gfx(S60)应用程序资源文件,例如图片和声音文件。Group该目录存放工程文件(例如.mmp和bld.inf)Images(UIQ)应用程序资源文件,例如图片。Inc该目录存放头文件(typically.h,.hrh和.inl)rsrc(UIQ)存放资源规格文件(.rss,.ra)src该目录存放.CPP文件Test存放测试代码在group目录下面,有两个重要的文件,这两个文件都与创建Symbian工程相关:如果,需要在命令行编译工程,必须创建如下两个工程文件:·工程定义文件(.mmpfile),这个文件对要编译的工程进行描述,并定义要构建的资源文件。该文件是环境无关的,编译工具用它来生成针对各种目标环境下的makefiles文件。·组件描述文件(bld.inf),这个文件列出了一组相关的工程,并包含一些编译指令.CodeWarrior和Carbide.c++都能够导入工程定义文件,并用它来在IDE环境下创建工程。下面详细描述这些文件的格式。Ø组件(component)描述文件:bld.infBld.inf是一个文本文件。它的内容非常繁琐,主要包括工程定义文件mmp和其他的任何编译工具所需要的文件。该文件分为多个节,其中,mmp文件列表在PRJ_MMPFILES节中。即使一个工程文件只包含一个mmp文件,bld文件仍然是必须的。下面是一个典型的bld.inf文件。//目标平台PRJ_PLATFORMSWINSCWGCCE//从工程中输出的文件PRJ_EXPORTS//None//工程定义文件PRJ_MMPFILESfilebrowseapp.mmp//工程定义文件(测试代码用)PRJ_TESTMMPFILES..\test\FileBrowseTest.mmp在上面的例子中,如PRJ_PLATFORMS声明所示,默认情况下工程被编译为针对WINSCW平台和GCC-E平台的执行代码。当您用CodeWarrior为模拟器编译代码的时候,您使用的是WINSCW平台,WINSCW的来由是,最终的代码运行于Windows,单线程模式(inaSinglepr