(本文发表于《CSDN社区电子杂志——移动开发杂志》创刊号)
摘要: Symbian OS是目前市场占有率最高的移动设备OS。本文是Symbian开发的入门性文章,从零开始介绍了进行Symbian开发首先需要了解的一些东西,同时介绍了一些好的开发资源。阅读本文几乎不需要相关的基础知识。
摘要: Symbian OS是目前市场占有率最高的移动设备OS。本文是Symbian开发的入门性文章,从零开始介绍了进行Symbian开发首先需要了解的一些东西,同时介绍了一些好的开发资源。阅读本文几乎不需要相关的基础知识。
1. Symbian简介
1.1 Symbian起源
Symbian 成立于1998 年6 月,是由爱立信、Matsushita(松下)、摩托罗拉、诺基亚、Psion、西门子和索尼爱立信共同持股的独立私营公司。Symbian 在移动计算设备和手机软件技术开发领域拥有近二十年的丰富经验,是一家由各主要无线通信技术公司持股的软件许可证授权公司,为支持数据分组传输的手机提供高级、开放式、标准化的操作系统— Symbian OS™。
1.2 Symbian发展和现状
您可以前往
这里查看Symbian发展史大事记。
目前,全球主流手机操作系统主要有四种:
Symbian OS
Windows Mobile
Palm OS
Linux OS
Symbian OS一支独秀,市场占有率达到了70%,而微软的windows mobile和其他操作系统一共只有30%的份额。
截至目前,以发布的采用Symbian OS的手机有:
Nokia 7610 ,Siemens SX1 等等,您可以在
这里找到完整的列表。那里还包括了正在开发中的基于Symbian OS的手机列表。
此外,您还可以在
这里找到Symbian的合作伙伴列表。
1.3 更多信息
需要从整体上了解Symbian系统,最为权威和准确的描述,莫过于Symbian的官方文档了。请参见
"Symbian介绍"。 得益于
“中文Symbian” 的成果,这是一篇中文文档。
2. Symbian开发
2.1 Symbian SDK简介
为Symbian OS开发应用程序的第一步就是获得一个SDK。Symbian OS SDKs支持基于Java和C++的开发。
这些SDK提供:
这些SDK提供:
1、便于构建和开发Symbian OS应用程序的一组二进制文件和工具。
2、所有API和工具的系统文档。
3、基于PC的Symbian OS手机模拟器。
4、带支持文档的样例应用程序。
2、所有API和工具的系统文档。
3、基于PC的Symbian OS手机模拟器。
4、带支持文档的样例应用程序。
由于Symbian OS本身不包括用户界面等,所以,通常会由一些伙伴厂商为Symbian OS提供特定的UI Platform。因此SDKs都是基于一个特定的UI Platform来构建的。一个UI Platform提供一个独特的UI,还有一系列面向各种任务的相关系统应用程序。这些常见的任务包括:收发消息、浏览、电话功能、多媒体功能和联系方式/日历管理等等。这些应用通常都会使用由Symbian OS提供的一些应用引擎。
从Symbian OS v6.0开始,共有以下各种SDK:
UIQ
Nokia Series 90
Nokia Series 80 (previously “9200 communicator series”)
Nokia Series 60
Nokia Series 40
此前的SDK都是特地于某个设备,比如the Pison netPad。Symbian不再支持这些遗留SDK了。
对于一个软件开发者来说,在你为一个特定的手机开发应用程序时,首先需要了解的就是与它相关的UI Platform。然后,你需要了解这个手机所使用的Symbian OS的版本。有了这两方面的信息,你就可以决定自己需要那个SDK了。
在大多数情况下,依靠这个SDK,你就可以开发一个单一版本的应用程序,然后能够在所有的基于相同的UI Platform和Symbian OS版本的手机上运行。
对于那些基于同一SDK的手机之间可能出现的各种差别,Symbian OS 系统定义文档给出了更进一步的细节信息。您可以自行查阅。
我们可以看到SDK主要分为两大类,即Nokia Series系列和UIQ。而Series系列中又以Series 60平台最为流行。需要指出的是,以上只是从开发平台上对SDK进行了划分,划分粒度是非常粗的。每种平台都会对应着一系列具体的开发工具,您需要根据自身情况,做出选择。
本文将以“SERIES 60 2ND EDITION SDK FOR SYMBIAN OS SUPPORTING FEATURE PACK 2 SUPPORTING MICROSOFT VISUAL C++ AND BORLAND C++BUILDERX”这个SDK为基础,通过一个简单的C++示例程序,让您对开发过程有所了解。您可以在
这里下载此SDK。由上面这个长的有些恐怖的名字我们可以了解到,这个SDK支持在VC++或BCB的IDE下开发程序。本文会先讲解如何通过命令行一步步的构建我们的第一个程序,然后还会简单介绍结合VC++.NET 2003 IDE的开发。此外,在安装该SDK以前,您需要安装Java Runtime Environment v 1.4.1_02 以及ActivePerl 5.6.1。前者,推荐大家直接安装JDK,而不仅仅安装JRE,这些都可以在
http://www.sun.com得到。后者大家可以前往
http://www.activestate.com 下载。
对于Java的开发,本文将不做介绍。您如果有兴趣,可以自行参考本文后面的推荐资源。
2.2 搭建开发环境
Ø 安装VC++.NET 2003。需要指出的是,我们需要VC++的编译器来编译代码,但是其IDE却是可选的。我们也可以从命令行来编译我们的代码。
Ø 安装JDK或JRE
Ø 安装ACTIVEPERL
Ø 安装SERIES 60 SDK 2
ND
Ø 设定环境变量。这恐怕是新手们最头疼的问题之一。网上对这个问题的解答,也可谓五花八门。所以最好的方法就是参考别人的意见,然后动手实践。以下内容均基于我的实践。有不同意见,欢迎讨论。
首先我想说,这一步完全是多余的,根本不需要。您甚至不需要严格的按照上面列出顺序来安装各种工具。不过我还是希望您可以耐心的把这段话看完,呵呵。
然后我想说,请使用VC++.NET带的“命令提示”工具来进行以下的实验。而不是使用Windows“附件”菜单中的那个“命令提示”工具。
原因如下:这里问题的关键是让各种工具可以在命令行上可见,这样我们就可以利用它们来编译我们的代码。而VC++.NET带的“命令提示”工具与Windows“附件”菜单中的那个“命令提示”工具的区别之一就是其PATH变量的值不同。前者的PATH变量包括:
1、安装VC++.NET过程中,添加的一些路径,包括主要的编译链接等工具。
2、系统环境下PATH变量的内容(通常可以这样设置:右击我的电脑—>属性—>高级—>环境变量—>系统变量。安装JDK,ACTIVEPERL,SERIES 60 SDK后,各种相应工具的路径也会添加到这里)。
而后者的PATH变量只包括2中的内容。
所以,如果不使用VC++.NET带的“命令提示”工具,您就会因为找不到相应编译工具,而无法继续下去。如果自己勤快一些,可以手动把1中的内容加到系统PATH中去,呵呵。这样就可以用Windows“附件”菜单中的那个“命令提示”工具了。
下面介绍一下我机器上的实验环境:
Ø VS.NET 2003(具体路径一大堆,故省略)
Ø Perl 5.8.6(D:/Perl/bin)
Ø JDK 1.5 (D:/Program Files/Java/jdk1.5.0_01/bin)
Ø SERIES 60 SDK 2
ND (D:/Symbian)
2.3 Series 60 平台介绍
Series 60平台基于Symbian OS 技术构造,包括用户界面、各种应用程序以及各种开发工具。Series 60的用户界面(UI)针对方便单手使用的目的进行了精心的设计。
从用户的角度来看,最为重要的特性也许正是它的UI。它的UI包括一个大屏彩显(176 x 208 pixel, 256 color display)以及各种输入按键(两个软键,五路导航键five-way navigation,收/发键等等,见图1)。Series 60平台包括一些常用的应用程序,比如个人信息管理(PIM)程序(比如,电话簿、日历、相册等),电子邮件程序,浏览程序,消息收发程序等等。Series 60平台还有一个安装引擎,通过它用户就可以安装或删除应用程序,既可以通过PC连接也可以通过“空中(OTA)”服务来完成。
图1 Series 60 Platform UI
|
![](https://p-blog.csdn.net/images/p_blog_csdn_net/Simore/Hello%20World_S60.gif)
2.4 从“Hello World”开始
从K&R开始,“Hello World”几乎成了入门必修课。呵呵,我们也顺其自然吧。
我们先将整个流程过一遍,然后再解释每一步都发生了什么。以下涉及到的各种路径都是以笔者的实验环境为依据的,您需要自行替换为自己机器上的路径。
2.4.1 从命令行编译
1、打开VS.NET 2003自带的命令行,进入以下目录:
D:/Symbian/8.0a/S60_2nd_FP2/Examples/basics/helloworld
这里有我们即将涉及到的三个文件:
HelloWorld.cpp C++源文件
HelloWorld.mmp 项目定义文件
Bld.inf
组件定义文件
2、构建我们的例子,请输入:
bldmake bldfiles
这一步会生成一个文件
ABLD.BAT
。
3、编译和链接,请输入:
abld build wins udeb
这一步会生成供Series 60 调试模拟器使用的文件。
4、运行,请在命令行进入:
D:/Symbian/8.0a/S60_2nd_FP2/epoc32/release/wins/udeb
这个目录含有刚生成的helloworld.exe文件。然后输入:
helloworld
这会调用Series 60的模拟器,并在其中运行helloworld.exe程序。效果如图2所示
![](https://p-blog.csdn.net/images/p_blog_csdn_net/Simore/Series%2060%20Platform%20UI.gif)
2.4.2 与VS IDE配合
1、先重复2.4.1节的步骤1和2
2、请输入以下命令:
abld makefile vc7
这会在目录:
D:/Symbian/8.0a/S60_2nd_FP2/epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2/EXAMPLES/BASICS/HELLOWORLD/HELLOWORLD/WINS
下面生成VS.NET 2003所需的解决方案文件、项目文件等等。
还有一种方法是,输入以下命令:
makmake helloworld vc7
这也会生成VS.NET 2003所需的解决方案文件、项目文件等等,只不过是在当前的目录下。
3、通过上述过程生成的文件,即可在VS.NET 2003的IDE中打开helloworld项目。然后就可以按照构建、运行、调试其它项目的方法来处理该项目了。比如:输入HELLOWORLD.sln,然后用Ctrl+Shift+B生成,再用Ctrl+F5直接运行(不调试),效果与图2一样。您会注意到,模拟器出现的很快。那是因为该项目是个简单的控制台程序,无须载入各种GUI库即可运行。
2.4.3 发生了什么?
上面只是按部就班的讲述了如何构建一个简单的程序,之所以没有涉及细节,是为了使您可以快速的体验一下开发过程(不包括调试,生成最终的发布版,载入实际目标设备运行等步骤)。下面就具体的介绍一下Symbian OS构建过程。
目前,构建Symbian 程序的两条主要的工具链为:
基于Metowerks CodeWarrior 编译器的工具链。
基于Microsoft Visual C++编译器的工具链。
您可以根据自己的意愿或需要来选用合适的工具,并配合相应的IDE来方便开发。但是一般来说不可以混合使用它们。
由于Symbian程序的构建工具以及最终目标的多样性,Symbian项目通常会先以一种通用的格式来描述。然后,可以使用相应的构建工具链来处理这个中立的项目文件,生成特定的项目文件。
刚开始,只有
HelloWorld.cpp,
HelloWorld.mmp,
Bld.inf 这三个文件。其中
HelloWorld.mmp和
Bld.inf就是两个关键的项目文件。
HelloWorld.mmp
:项目定义文件,描述了将要构建的项目信息,还定义了一些资源文件和应用程序信息文件。它是一个环境中立的文件,可以使用各种工具来处理并生成各种目标环境的make文件。您可以使用文本编辑器查看该文件。里面的信息还是很简明的,包括构建目标,构建类型,源路径,库文件,头文件等等信息。
Bld.inf
:组件描述文件,它列出了一个组件当中包括的所有项目,还包括一些额外的构建指令。您也可以使用文本编辑器查看该文件。对于本实例来说,仅包括一个项目HelloWorld.mmp。
2.4.3.1 Bldmake命令的作用
当我们运行
bldmake bldfiles
这个命令时,会处理当前目录下的bld.inf文件,具体来说会执行以下处理过程:
1、生成目录
D:/Symbian/8.0a/S60_2nd_FP2/epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2/EXAMPLES/BASICS/HELLOWORLD
2、在这个目录下,生成一系列的Make文件,针对各种目标环境。比如VC7.MAKE,CW_IDE.MAKE等等。
3、在当前目录下生成abld.bat文件,这个文件会在随后用到。您可以查看该文件的内容。但是建议不要手工的更改它的内容。
Bldmake命令也支持其他的命令行选项,您可以直接输入bldmake来查看简要的介绍,还可以查看SDK文档了解详细信息。
2.4.3.2 abld命令的作用
由bldmake处理bld.inf文件得到的abld.bat文件,使得abld命令可用。Abld.bat控制着构建一个项目的方方面面。Abld命令的语法非常地灵活,它拥有许多命令行选项,它们的组合涵盖了各种构建需求。最常用的组合,莫过于abld build 和 abld clean 相关了。
当我们运行
abld build wins udeb
这个命令时,将为wins平台(即通常的VC++环境)生成一个debug版本的程序。
具体来说,在
D:/Symbian/8.0a/S60_2nd_FP2/epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2/EXAMPLES/BASICS/HELLOWORLD/HELLOWORLD/WINS/UDEB
和
D:/Symbian/8.0a/S60_2nd_FP2/epoc32/release/wins/udeb
下面各生成了一些文件,比如Helloworld.exe文件。
如果只是调用
abld build
那么会为所有可能的平台构建程序。
而运行
abld clean
会删除属于当前组件的,编译过程中生成的所有中间文件和可执行文件,以及由链接器导入的库文件。
您也可以指定只删除某个平台的文件。
具体的abld语法,请查看SDK文档。
2.4.3.3 makmake命令的作用
简而言之,就是处理.mmp文件,生成各种目标平台的make文件。既可以针对命令行来生成,也可以针对IDE来生成。用于命令行的makefile无法用于IDE。
所以我们的命令:
makmake helloworld vc7
就为VS.NET 2003 IDE生成了相关的makefile,然后我们就可以通过这些文件借助VS的强大功能了。
更多的makmake语法,请查看SDK文档。
3 开发资源不完全索引
Symbian OS官方网站不用多说,这是Symbian相关信息的最权威来源。
诺基亚论坛这是最为活跃的移动开发技术社区。尤其是关于Nokia Series系列的资源非常的丰富。 而且,现在还有 诺基亚论坛简体中文版这极大的方便了国内的开发者学习相关技术。
SDKs之外的开发工具 除了各种Symbian SDK之外,还有许多有用的工具和SDK插件可供开发者使用。
基于Symbian OS提高自己水平的一个有效途径就是学习或加入一个优秀的开源项目。
专门针对Series 60基于Symbian OS的Series 60平台是目前业界领先的智能电话平台。
UIQ的官方网站成立于1999年,是完全归Symbian公司所有的一家子公司。他们面向开发移动设备的UI Platform——UIQ,并授权给那些全球领先的移动设备制造商。 UIQ Technology AB系列的网站 的优秀开源项目
诺基亚论坛这是最为活跃的移动开发技术社区。尤其是关于Nokia Series系列的资源非常的丰富。 而且,现在还有 诺基亚论坛简体中文版这极大的方便了国内的开发者学习相关技术。
SDKs之外的开发工具 除了各种Symbian SDK之外,还有许多有用的工具和SDK插件可供开发者使用。
基于Symbian OS提高自己水平的一个有效途径就是学习或加入一个优秀的开源项目。
专门针对Series 60基于Symbian OS的Series 60平台是目前业界领先的智能电话平台。
UIQ的官方网站成立于1999年,是完全归Symbian公司所有的一家子公司。他们面向开发移动设备的UI Platform——UIQ,并授权给那些全球领先的移动设备制造商。 UIQ Technology AB系列的网站 的优秀开源项目
4 小结
正如本文的摘要所述,这是一篇入门的文章。为此,文章舍弃了许多内容。笔者认为那些内容更适合出现在其他主题的文章中。呵呵,希望这篇文章能给您带来一些收获,帮助您顺利的搭上Symbian开发的快车。