安装和配置 Series 60 2nd SDK的C++开发环境有点烦琐,网上也有几中不一样的做法。但万变总是不离其宗,刚开始的时候看的蒙蒙胧胧,研究了几天总算有点眉目了,现在写点东西算是给自己一个总结,也给大家一个借鉴。
首先是安装前的准备工作。
我安装SDK的是Series 60 2nd Edition SDK for Symbian OS, Supporting Feature Pack 2 For C++, Chinese Version。
下载地址:http://www.forum.nokia.com/main/0,,034-4,00.html.
在安装Series 60 2nd SDK 前建议先安装ActivePerl,目前的最新版本是:5.8.6.811,可以到他的官方网站下载。
下载页面:http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl
另外还需要安装J2RE(且不管是否有用)和VC++6 ,SP3以上,VC++6的Service pack 可以到微软网站下载。
J2RE可到www.sun.com下载;
如果你的VC++6是英文版的,那么可以到这个地址下载vs6sp5:
http://www.microsoft.com/downloads/details.aspx?FamilyID=e41b1d62-f3cb-4867-b86a-a2fe4932cf70&DisplayLang=en
另外,建议把Series 60 2nd SDK 和以上这些安装的软件装在一个逻辑硬盘下,并且在以后的使用中把工程文件也保存到同一逻辑硬盘中。
在做完这些安装前的准备工作以后就可以安装Series 60 2nd SDK了。我的Series 60 2nd SDK安装在了C盘下,安装完后可以在C盘看到Symbian目录。若下文中没有特别说明的话,那么提到的目录都是位于C:/Symbian/8.0a/S60_2nd_FP2_SC目录下。
建议直接把 Series 60 2nd SDK 安装在 盘符根目录下,当然,这不是强制的, 原则上Series 60 2nd SDK 安装的时候,目录名不包含空格就可以了。
检查系统环境变量中是否有EPOCROOT,如果没有则添加该环境变量值为:/Symbian/8.0a/S60_2nd_FP2_SC/ 。按照我这种安装方式EPOCROOT的值是/Symbian/8.0a/S60_2nd_FP2_SC/,其他的就不一定了
完成后, 打开一个命令行窗口,输入 epoc , 如果你看到模拟器运行,就说明 Series 60 2nd SDK 已经安装好了。

图-1 Series 60 2nd SDK安装完成
VC++6 集成开发环境
<方法-1>
接下来的工作是集成开发环境,我这里以listbox为例来说明具体的步骤。这个例子位于Series60Ex目录下。在listbox目录下,你会看到你会看到若干文件夹,先不管这些文件夹是做什么的;直接进入Group目录。 Group目录包含了两个文件:aknexlist.mmp和bld.inf。先不管这两个文件是怎么来的,做什么用的,这些问题有待以后慢慢了解。现在在Group目录下编写一个批处理文件:
==mmkvc6.bat==
cd C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/group makmake aknexlist.mmp vc6 |
运行mmkvc6.bat。step_1.bat运行以后,在group下产生四个文件VC++6的文件,这个马上可以看到。然后启动VC++6,来编译这个工程。需要注意的是,不要把这四个文件剪切到另外一个新建的目录中。我原先就犯了这个错误,以为这么多文件放在一起比较乱,然后在GROUP目录下又新建了一个vc6的目录,把mmkvc6.bat产生的四个文件放到了cv6中,这样造成了编译错误。
现在启动VC++6,选择菜单 FileàOpen Workspace,浏览到
C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/group目录,选择工作区文件AKNEXLIST.DSW打开。然后按编译按钮,进行编译,一般来说编译是可以通过的。但是在某些时候也会出现编译错误的情况,关于这个情况请参看下文中提到的<方法-2>ListBox这个例子建议首先使用<方法-2>进行编译,因为我在使用<方法-1>的时候是除了点问题的,Helloworldbasic这个例子用<方法-1>编译就没有什么问题。
编译时在epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2_SC/SERIES60EX/LISTBOX/GROUP/AKNEXLIST/WINS/UDEB 目录下产生目标文件,这些是模拟器运行所需要的文件。编译后点运行按钮,VC++6 出现一个对话筐,询问可执行文件的路径,可执行文件也就是EPOC.exe文件,这个文件位于:C:/Program Files/Common Files/Symbian/tools目录下,但是这里需要注意的是VC++这里使用的是DOS命令,所以这个路径应该是:C:/Progra~1/Common~1/Symbian/tools/Epoc.exe,确定后运行,VC++启动模拟器。可以在模拟器中看到ListBox;
图-3 运行 ListBox
<方法-2>
在实践中我发现,使用上述方法来集成开发环境在某些情况下会发生编译错误,错误原因有的是包含文件找不到,有的是perl的错误。使用下面的方法集成开发环境,基本可以避免编译时的错误。首先编写三个批处理文件:
==getAbld.bat==
cd C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/group bldmake bldfile |
==makeWin.bat==
cd C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/group abld build wins udeb |
==abld_makeFile_vc6.bat==
cd C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/group abld makefile vc6 |
mmk_makeFile_vc6.bat 也可以这样写,我把它另存为mmk_makeFile_vc6.bat 。
cd C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/group makmake aknexlist.mmp vc |
getAbld.bat运行以后,在C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/group下产生一个ABLD.BAT文件。在 epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2_SC/SERIES60EX会多出一个listbox文件夹,在它的Group目录下包含了一大堆Make文件。可见,bldmake:这个命令工具可以创建一个命令文件(Abld.bat),用这个文件可以编译并连接你的应用程序。 Bldmake需要bld.inf文件来完成这些工作,Abld.bat文件是应用程序编译的入口点. 在makeWin.bat和makeFile_vc6.bat中都使用了这个命令。
接着运行makeWin.bat, makeWin.bat执行以后在epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2_SC/SERIES60EX/LISTBOX/GROUP下多了一个AKNEXLIST目录,在AKNEXLIST目录的WINS目录的UDEB下存放了可以在Windows下模拟器中运行的LISTBOX程序。现在可以打开模拟器,开始->程序->Series 60 Developer Tools->...->Emulator (Debug),启动模拟器。,在应用程序列表中(需要往下拉一点)可以看到listbox这个程序。事实上makeWin.bat是对ListBox工程进行了编译,在UDEB目录下产生了一系列目标文件。当然,我们现在的目的是使Symbian OS的工程转化为VC++6的工程,所以还需要运行abld_makeFile_vc6.bat或mmk_makeFile_vc6.bat以生成VC++6所需要的一系列工程文件。
打开abld_makeFile_vc6.bat ,程序会在epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2_SC/SERIES60EX/LISTBOX/GROUP/AKNEXLIST/WINS目录下生成VC++6所需要的工程文件。打开AKNEXLIST.DSW工作区文件,编译。这个时候你可以先把C:/Symbian/8.0a/S60_2nd_FP2_SC/epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2_SC/SERIES60EX/LISTBOX/GROUP/AKNEXLIST/WINS/UDEB目录下的文件全部删除,VC++6会重新编译生成这些文件。所以使用VC++6来编译的目的就是你可以先在VC++6中编辑工程的,然后重新编译,VC++6是一个开发工具。当然,你可以不用abld_makeFile_vc6.bat来生成VC++6的工程文件,而用mmk_makeFile_vc6.bat来生成。运行mmk_makeFile_vc6.bat 以后,在Series60Ex/listbox/group下产生vc++6工程文件,同样打开AKNEXLIST.DSW工作区文件,编译。
生成目标机器代码
为了是使程序能够在目标机器( 诺基亚3650、7650)上运行,需要编写两个批处理文件 makeArmi.bat和makeInstall.bat:
==makeArmi.bat==
cd C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/Listbox/group abld build armi urel |
==makeInstall.bat==
cd C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Ex/listbox/sis/ makesis listbox.pk |
makeArmi.bat批处理文件功能是生成可在目标机器( 诺基亚3650、7650)上运行的代码。makeArmi.bat运行以后,可以在epoc32/BUILD/SYMBIAN/8.0A/S60_2ND_FP2_SC/SERIES60EX/LISTBOX/GROUP/LISTBOX/看到多了一个ARMI目录。最后,还要制作可以在手机上安装的.sis文件。转到Series60Ex/listbox的sis目录下,运行makeInstall.bat,这时并没有产生.sis文件,同时程序报错:文件没有找。
图-10 生成目标机器代码运行错误
现在用记事本打开listbox.pkg把里面的出现的thumb目录改成armi目录。重新运行makeInstall.bat,运行后马上可以在SIS目录看到sis文件生成了,使用这个安装文件就可以把ListBox程序安装到手机上。
创建自己的Symbian OS工程
<工程生成文件>
很多人会想,在Series60Ex下的这么多Symbian OS工程是怎么创建出来的。在S60_2nd_FP2_SC SDK中提供了一个Application Wizard来创建Symbian OS工程。由于 Symbian OS程序可以使用多种开发工具,而每一种工具又有其特有的工程结构和文件格式,所以有必要使用一种中立的工程结构和文件格式来保存Symbian OS工程,然后利用SDK所提供的工具把它转成特定开发工具所兼容的格式。这种通用格式的核心文件包括:组件描述文件和工程定义文件。
·组件描述文件:在这个文件中罗列了组件中所包括的所有工程以及额外的编译指令。这个文件通常被命名为bld.inf,被bldmake命令用来定义abld.bat文件。bld.inf可以由若干部分组成,每一个部分都包括一个头字符串,头字符串可以是:prj_platforms, prj_exports, prj_testexports, 和 prj_mmpfiles,它们不区分大小写、头字符串可以重复出现、可以用一个反斜杠(/)表示续行、注释的语法和C++一样。例如:
PRJ_MMPFILES Graphic/ s.mmp //I am LeeFangJie |
·工程定义文件(.mmp文件):这个文件描述了一个将要被编译的工程。这是一个中立文件,可以被SDK工具用来创建指定开发工具的工程文件,当然,这些开发工具必须是被DSK工具所支持的,比如说VC++6。在mmp文件中,同时也定义了需要被编译的资源文件和应用程序信息文件。makmake命令可以利用工程定义文件创建特定开发平台的工程文件。在abld命令中实际上是调用了makmake命令,但是它要比makmake命令使用更加方便。Mmp文件定义时要求每一个语句独占一行,一行无法写下时,用反斜杠表示续行;注释语法和C++一样。另外续行符要和目录分割符相区分(都是反斜杠:/),在目录结尾不需要写反斜杠,以免被误认为是续行符。以下是一个mmp文件:
SOURCE GraphicsAppUi.cpp SOURCE GraphicsDocument.cpp SOURCEPATH ../../helperfunctions SOURCE bitmapmethods.cpp SOURCEPATH ../data RESOURCE Graphics.rss RESOURCE Graphics_caption.rss USERINCLUDE ../inc USERINCLUDE ../../helperfunctions SYSTEMINCLUDE /epoc32/include START BITMAP images.mbm HEADER TARGETPATH /system/apps/graphics SOURCEPATH ../gfx SOURCE c12 image1.bmp SOURCE c12 image2.bmp SOURCE 1 image2_mask.bmp END LIBRARY euser.lib LIBRARY apparc.lib LIBRARY cone.lib LIBRARY eikcore.lib LIBRARY avkon.lib LIBRARY fbscli.lib LIBRARY bitgdi.lib LIBRARY Commonengine.lib LANG SC AIF Graphics.aif ../aif GraphicsAif.rss c12 qgn_grap_list_icon.bmp qgn_grap_list_icon_mask.bmp qgn_grap_pane_icon.bmp qgn_grap_pane_icon_mask.bmp // End of File |
<使用 Application Wizard创建 Symbian OS 工程文件>
现在我们可以利用Application Wizard一步一步的创建Symbian OS工程文件。Application Wizard可以被认为是一个插件管理器,而这些插件可以被方便的安装到Application Wizard上,做为Application Wizard的一部分。利用这些插件可以轻松的生成Symbian OS应用程序筐架,在应用程序筐架生成过程中Application Wizard要求你输入关于你要创建的应用程序的各种信息,最后根据这些信息,Application Wizard 生成程序的所有代码。
现在启动Application Wizard,开始->程序->Series 60 Developer Tools->...->tools->Application Wizard。出现Application Wizard界面:
图-4 建立自己的Symbian OS 工程文件-1
在Select wizard plugin中选择Series 60 Application Wizard,在project name中输入mySymbianTestPrj,这是我要创建的工程名称。Project folder,是一个保存工程文件的目录,建议和你的S60_2nd_FP2_SC SDK 安装文件在同一个逻辑硬盘中。最后点[Create],首先出现general面板:
图-5建立自己的Symbian OS 工程文件-2
在what type of application would you like to create?中已经默认选择了EIKON,这里是让你选择Symbian OS应用程序的筐架。如果你选择EIKON,则应用程序的Main View会从CCoeControl 类继承;如果选择Dialog Based则Main View会从CEikDialog继承。这里的Main View可以理解为主窗口。另外还有一个选项是Support view architecture,如果你选中了这个选项,那么应用程序向导将会为你创建两个视图(view),每个视图不是继承于CCoeControl类就是继承于CEikDialog类。关于Symbian OS应用程序的筐架你可以参看一些其他的资料。
Application Title 是指应用程序名称。Application UID是指应用程序的UID(unique identification)。Symbian OS 用一个唯一的 UID 数值来确定和区分安装在设备上面的应用程序,UID必须是16进制的,它的范围在0x00000001 - 0x0FFFFFFF之间。在同一个设备上,UID必须是唯一的,如果有重复的UID存在,那么相同UID的程序将不会在面板上出现。
INI file 和 Document file 这两项通常不需要选种,它询问你是否产生INI file和Document file,这两个文件通常被认为是没有必要的,它们只会增加系统的访问次数。如果你想要系统支持basic Skins 那么可以选种Skin选项。
然后[Next]。Other 面板:
图-6建立自己的Symbian OS 工程文件-3
在other面板中可以输入程序作者以及版权信息,然后[Next] 出现Class 面板:
图-7建立自己的Symbian OS 工程文件-4
在Class 面板你可以修改默认的.cpp文件和.h文件的文件名,然后[Next], 出现Folders 面板:
图-8 建立自己的Symbian OS 工程文件-5
在Folders 面板中可以修改默认的应用程序文件夹名称,然后[Next],出现 IDE options面板:
图-9 建立自己的Symbian OS 工程文件-6
在IDE options面板 主要让你选择产生何中IDE下的工程文件,我的机器上安装了两个IDE所以他出现了Microsoft Visual C++ 6.0和Microsoft Visual Stdio .NET 2003两个选项,我这里选择了Microsoft Visual C++ 6.0。最后[Genreate]就可以了。然后你可以看一下C:/Symbian目录下是不是多了一个mySymbianTestPrj文件夹,这就是刚才创建的工程。
结束
掌握了开发环境之后,下一步是掌握Symbian C++的一些专有语法,然后是熟悉 Symbian的application framework. 然后就可以开始学习写一些简单的UI application了。