塞班sis开发.docx
《塞班sis开发.docx》由会员分享,可在线阅读,更多相关《塞班sis开发.docx(21页珍藏版)》请在冰豆网上搜索。
塞班sis开发
第一章:
SymbianOS简介
作者:
谢兴enigma19971@
1.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.1
S60第二版功能包3–SymbianOSv8.1
S60第二版功能包2–SymbianOSv8.0a
S60第二版功能包1–升级SymbianOSv7.0s
S60第二版–SymbianOSv7.0s
S60第一版–SymbianOSv6.1
您可在以下网站查到每一系列S60SDK所包含的手机型号列表:
其它大部分基于SymbianOS的手机采用笔控输入的UIQ用户界面。
以下网站列出了基于各版本的UIQSDK的手机机型
您可以到以Nokia的网站下载SDK
1.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.inf
Bld.inf是一个文本文件。
它的内容非常繁琐,主要包括工程定义文件mmp和其他的任何编译工具所需要的文件。
该文件分为多个节,其中,mmp文件列表在PRJ_MMPFILES节中。
即使一个工程文件只包含一个mmp文件,bld文件仍然是必须的。
下面是一个典型的bld.inf文件。
//目标平台
PRJ_PLATFORMS
WINSCWGCCE
//从工程中输出的文件
PRJ_EXPORTS
//None
//工程定义文件
PRJ_MMPFILES
filebrowseapp.mmp
//工程定义文件(测试代码用)
PRJ_TESTMMPFILES
..\test\FileBrowseTest.mmp
在上面的例子中,如PRJ_PLATFORMS声明所示,默认情况下工程被编译为针对WINSCW平台和GCC-E平台的执行代码。
当您用CodeWarrior为模拟器编译代码的时候,您使用的是WINSCW平台,WINSCW的来由是,最终的代码运行于Windows,单线程模式(inaSingleprocess),并用CodeWarrior编译。
平台的名称用来标识最终的可执行代码所运行的那个平台。
所以,当上面的代码被编译完后,可执行程序被放在\epoc32\release\winscw目录下面(根据是调试(debug)版本还是释放(release)版本,被放在\udeb或\urel子目录下面)。
如果代码是针对手机硬件的,需要选用GCCE平台。
这时,最终的可执行代码被放到\epoc32\release\gcce\目录下面。
?
工程描述文件(mmp)
mmp文件中的每个语句都以一个关键字开头。
下面是一个典型的mmp文件的例子。
//filebrowseapp.mmp
TARGETfilebrowseapp.exe
TARGETTYPEexe
UID0x100039CE0xE80000A6
VENDORID0
#ifdef__WINSCW__
CAPABILITYAllFiles//AllFilesonemulatorsincenosigningisrequired
#else
CAPABILITYNONE//Nocapabilitiesonhardware-otherwiseSISfilesigningisrequired
#endif
SOURCEPATH..\src
SOURCEFileBrowseAppUi.cpp
SOURCEFileBrowseDocument.cpp
SOURCEFileBrowseApplication.cpp
SOURCEFileBrowseBaseView.cpp
SOURCERFsEngine.cpp
SYSTEMINCLUDE\epoc32\include
USERINCLUDE..\inc
SOURCEPATH..\data
STARTRESOURCEfilebrowseapp.rss
TARGETPATH\resource\apps
HEADER
END
STARTRESOURCEfilebrowseapp_reg.rss
TARGETPATH\private\10003A3F\apps
END
STARTRESOURCEfilebrowseapp_loc.rss
TARGETPATH\resource\apps
LANGSC
HEADER
END
STARTBITMAPfilebrowseapp.mbm
TARGETPATH\resource\apps
HEADER
SOURCEPATH..\gfx
SOURCEC16folder.bmp
SOURCEC16file.bmp
SOURCE8mask.bmp
END
LIBRARYeuser.libefsrv.libcone.libeikcore.libeikcoctl.libeikdlg.libegul.libeikctl.libapparc.lib
LIBRARYbafl.lib
LIBRARYavkon.libCommonEngine.lib
下面简单地描述每个关键字的作用:
TARGET
该关键字指明了目标文件(exe或dll文件)的名称。
TARGETTYPE
该关键字指明了工程所产生的目标文件的类型,在上面的例子中,我们生成了一个可执行文件。
在大多数情况下,目标文件的类型为dll,exe或是其他的插件(plugin)。
UID
目标(通常指可以执行的.exe或.dll文件)具有三个UID,这些UID用来标识组件,第一个UID是无须指定的。
因为它是编译工具根据目标的类型自动分配的。
所以这里所指定的实际上是UID2,这个值进一步指明了目标的类型,上面例子中,值(0x100039CE)指明了目标文件是一个应用程序,Symbian系统使用这个值来标识所有的应用程序。
下一个指定的UID对每个应用程序来说都是唯一的。
它标识了这个应用程序的注册资源文件和该程序的安装包文件.pkg。
所以为了保证这个值的唯一性,您必须要向Symbian申请这个UID,由他们负责从数据库中为您的应用程序分配一个UID。
可到Symbian的网站上了解更多的相关信息。
有一些UID的值是用来测试的,例如SDK中的例子:
文件系统浏览应用程序(filesystembrowser)所使用的UID为0xE80000A6,您也可以在测试您的应用程序的时候使用这个值,但注意,不要在您的最终产品中使用它。
SECUREID
这是个可选的关键了,上面的例子中没有出现。
该关键字为应用程序定义了安全标示符,用来指明这个程序可以访问哪个私有的目录。
如果该关键字没有使用,用UID3来代替该关键字。
VENDORID
该关键字是在SymbianOSv9.1版本新增的。
用来指定软件提供商的ID号。
该关键字不是必须的,可省略。
CAPABILITY
这是SymbianOS9.1新增加的关键字。
该关键字指明了应用程序的权限(或称作能力,如:
查看系统目录)。
大上面的例子中,应用程序在模拟器上和在手机上被分配了不同的能力(capability)。
在模器上,该程序被赋予了AllFiles的权限,比在手机上运行时,能看到更多的私有文件系统的区域。
没有被赋予AllFiles能力的程序不能看到\Sym目录下的内容。
应用程序只有在经过认证(certificate)以后才能获得AllFiles的能力。
关于认证和签名的内容,我们在这一章的后面会讲到。
SOURCEPATH和SOURCE
SOURCE关键字指明了有哪些源文件和资源文件需要编译,而SOURCEPATH关键字指明了这些文件的位置。
这个位置既可以是相对路径(相对于mmp文件),也可以是绝对路径。
SYSTEMINCLUDE
这个关键字指定了系统头文件的位置,系统头文件通常用#include<>语句包含。
USERINCLUDE
该关键字的作用类似于SYSTEMINCLUDE,它指明了在用户自定义头文件所在的位置。
STARTRESOURCE…END
STARTRESOURCE关键字表明了一个信息块的开始,这些信息指明了如何编译资源文件。
END标示该信息块结束。
TARGETPATH
该关键字用来指定被编译后的资源文件的位置。
注意:
由于安全方面的考虑,所有的可执行代码(exe或dll)都从手机上的\sys\bin\目录运行。
可执行代码不需要用该关键字指定位置。
TARGETPATH关键字仅仅用来指定编译后的资源文件的位置。
HEADER
这是一个可选的关键字,当它被使用的时候,系统将会在\epoc32\include\路径下创建资源头文件(.rsg)。
这个头文件包含了允许以C++代码引用特定资源的标识符。
LIBRARY
这个关键字列出了应用程序需要链接的库文件。
STATICLIBRARY
该关键字用来指定需要被静态链接的库文件(库文件中的代码会被链接到您的程序中,而不是需要时才装载到内存)。
STARTBITMAP…END
这一节包含了应用程序图标所使用的位图(bitmap),以及如何将这些位图编译成.mbm(Symbian系统专有的图像格式)的方式。
EPOCSTACKSIZE
该关键字是可选的,我们上面的例子中并未用到。
在以前的SymbianOS版本中,缺省的栈大小为0X5000字节。
在v9.1版本中,缺省值为0x2000。
为了增加栈的大小,可以使用该关键字。
例如:
EPOCSTACKSIZE0x5000。
要注意的是,对栈设置仅仅对真实设备有效,但对模拟器无效。
EPOCHEAPSIZE
该关键字也是可选的,我们上面的例子中并未用到。
这个关键字指定了应用程序可以使用的最大、最小堆空间。
缺省情况下,4K为最小的尺寸,1M为最大的尺寸。
1.9.
第一个程序:
HellowWorld
1.9.1.
创建工程
运行Carbide集成开发环境,在菜单栏上选择file->New->SymbianOSC++project,出现如下图所示的对话框:
我们选择带用户界面设计器的图形用户界面应用程序(CarbideExpress版本不支持用户界面设计的功能)。
然后点击“下一步”按钮。
出现下面的对话框:
用户选择一个sdk的版本(笔者的机器上安装的是s60_3rd_FP1版本的sdk)。
继续下一步:
按下一步,继续:
选择一个空的界面,这样我们可以自由地在上面添加控件。
下面的步骤一直按“下一步”,直到完成。
1.9.2.
在模拟器上运行和调试
工程建立完成后,就可以构建(build)工程了。
在将程序放到手机上运行之前,我们通常需要先在模拟器上运行、调试程序。
模拟器是SDK附带的一个软件,能够模拟真实手机的运行情况。
在工程透视图中,选中工程,点击右键,将活动构建设置为EmulatorDebug(Winscw)。
如下图所示:
这样,编译出来的程序版本才是针对模拟器的。
设置后,可以构建(build)工程了:
在工程透视图中选中工程,点击右键,选择“buildTargetOnly”(只编译模拟器版本,节省时间)。
最后,点击工具栏上的运行按钮---,选择RunAs->1RunSymbianOSApplication
Carbide启动模拟器,这个过程需要持续几十秒到几分种,依赖机器的配置。
在模拟器启动后,点击模拟器上的软件键------,模拟器会出现下面的界面:
选择Installed选项后,可以看到应用程序的图标:
在模拟器上点击按钮,运行该程序。
1.10.
在手机上运行和调试
1.10.1.
基本概念
能够在模拟器上运行、调试程序后,您可能想要在真实的手机上运行您的程序。
但在这之前,先需要搞清以下几个基本概念:
?
GCCE版本和ARM版本:
在真实设备上运行的程序版本不同于我们在模拟器上运行的程序版本,在设备上运行的版本必须是GCCE版本或ARM版本。
其中GCCE版本