一、软件准备1. ActivePerl
必须要ActivePerl-5.6.1.635版本的。
ftp://ftp.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.635-MSWin32-x86.msi
2. J2SE 5
最好是j2se 5的,据说j2se 6的会有问题。
http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-1_5_0_18-windows-i586-p.exe?BundledLineItemUUID=N15IBe.piNMAAAEgRjcRNmTG&OrderID=x1lIBe.pIo0AAAEgLzcRNmTG&ProductID=79FIBe.nKlMAAAEfLBlzHdQ4&FileName=/jdk-1_5_0_18-windows-i586-p.exe
3. Carbide 2.0
http://www.forum.nokia.com/info/sw.nokia.com/id/dbb8841d-832c-43a6-be13-f78119a2b4cb.html
4. S60 SDKs supporting Symbian C++
Sdk必须根据自己的需要选定不同的版本。
http://www.forum.nokia.com/info/sw.nokia.com/id/4a7149a5-95a5-4726-913a-3c6f21eb65a5/S60-SDK-0616-3.0-mr.html
二、平台搭建
因为某些原因,最好把开发工具都安装在一个盘符下,而且项目目录也需要在同一个盘符。
l Perl安装l J2se安装l Carbide安装
Carbide c++ 2.0要求装在vista或者xp sp2上面,但是我的xp sp3不知道有什么影响。可以选择professional Edition。
安装完之后要运行安装目录下 /x86Build/env_switch/env_update.exe
l SDK安装l 目录结构如图所示:三、简单例子1. 创建项目
打开Carbide c++
File—new—project
2. 编译项目
设置build类型:右键选择项目,选择build configurations,设置成编译成winscw版本即仿真器运行版。
Build项目:右键选择项目,选择build project
3. 运行项目
右键选择项目,选择run as
编译会根据编译的类型把生成的文件放到EpocRoot的不同目录下去,现在是winscw版:
现在就可以看到我们的第一个程序了,不过里面什么也没有:
四、杂记
1. Symbian是操作系统,和windows是一样类型的玩意。而s40、s60等是基于Symbian OS之上的平台,提供各种接口,等于是一层API壳。
2. 项目目录结构
data(S60) 资源规格文件(.rss)
Gfx(S60) 应用程序资源文件,例如图片和声音文件
Group 工程文件,例如 .mmp和 bld.inf
Image(UIQ) 应用程序资源文件,例如图片
Inc 头文件
rsrc(UIQ) 资源规格文件(.rss .ra)
src .cpp
3. bld.inf文件
一个必须的文本文件,主要包括项目定义文件和其他任何编译工具所需要的文件。
PRJ_PLATFORMS //目标平台
WINSCW ARMV5 GCCE
PRJ_EXPORTS //项目的输出的文件
PRJ_MMPFILES //项目定义文件
gnumakefile icons_aif_scalable_dc.mk
myFirst.mmp
4. 项目描述文件 .mmp
TARGET myFirst.exe
UID 0x100039CE 0xE22DC27E
VENDORID 0
TARGETTYPE exe
EPOCSTACKSIZE 0x5000
SYSTEMINCLUDE /epoc32/include /epoc32/include/variant /epoc32/include/ecom
USERINCLUDE ../inc ../data
SOURCEPATH ../data
START RESOURCE myFirst.rss
HEADER
TARGETPATH resource/apps
END //RESOURCE
START RESOURCE myFirst_reg.rss
TARGETPATH /private/10003a3f/apps
END //RESOURCE
LIBRARY euser.lib apparc.lib cone.lib eikcore.lib avkon.lib
LIBRARY commonengine.lib efsrv.lib estor.lib eikcoctl.lib eikdlg.lib
LIBRARY eikctl.lib bafl.lib fbscli.lib aknnotify.lib aknicon.lib
LIBRARY etext.lib gdi.lib egul.lib insock.lib
LIBRARY ecom.lib InetProtUtil.lib http.lib esock.lib
LANG 01
START BITMAP myFirst.mbm
HEADER
TARGETPATH /resource/apps
SOURCEPATH ../gfx
SOURCE c12,1 list_icon.bmp list_icon_mask.bmp
END
SOURCEPATH ../src
#ifdef ENABLE_ABIV2_MODE
DEBUGGABLE_UDEBONLY
#endif
SOURCE myFirstContainer.cpp MyFirstContainerView.cpp myFirstDocument.cpp myFirstAppUi.cpp myFirstApplication.cpp
TARGET
该关键字指明了目标文件(exe或dll文件)的名称。
TARGETTYPE
该关键字指明了工程所产生的目标文件的类型,在上面的例子中,我们生成了一个可执行文件。在大多数情况下,目标文件的类型为dll,exe或是其他的插件(plugin)。
UID
目标(通常指可以执行的.exe或.dll文件)具有三个UID,这些UID用来标识组件,第一个UID是无须指定的。因为它是编译工具根据目标的 类型自动分配的。所以这里所指定的实际上是UID2,这个值进一步指明了目标的类型,上面例子中,值(0x100039CE)指明了目标文件是一个应用程 序,Symbian系统使用这个值来标识所有的应用程序。下一个指定的UID 对每个应用程序来说都是唯一的。它标识了这个应用程序的注册资源文件和该程序的安装包文件.pkg。所以为了保证这个值的唯一性, 您必须要向Symbian申请这个UID,由他们负责从数据库中为您的应用程序分配一个UID。可到Symbian的网站上了解更多的相关信息。有一些 UID的值是用来测试的,例如SDK中的例子:文件系统浏览应用程序(filesystem browser)所使用的UID为0xE80000A6, 您也可以在测试您的应用程序的时候使用这个值,但注意,不要在您的最终产品中使用它。
SECUREID
这是个可选的关键了,上面的例子中没有出现。该关键字为应用程序定义了安全标示符,用来指明这个程序可以访问哪个私有的目录。如果该关键字没有使用,用UID3来代替该关键字。
VENDORID
该关键字是在Symbian OS v9.1版本新增的。用来指定软件提供商的ID号。该关键字不是必须的,可省略。
CAPABILITY
这是 Symbian OS 9.1新增加的关键字。该关键字指明了应用程序的权限(或称作能力,如:查看系统目录)。
SOURCEPATH和SOURCE
SOURCE关键字指明了有哪些源文件和资源文件需要编译,而SOURCEPATH关键字指明了这些文件的位置。这个位置既可以是相对路径(相对于mmp文件),也可以是绝对路径。
SYSTEMINCLUDE
这个关键字指定了系统头文件的位置,系统头文件通常用#include<>语句包含。
USERINCLUDE
该关键字的作用类似于SYSTEMINCLUDE,它指明了在用户自定义头文件所在的位置。
START RESOURCE…END
START RESOURCE 关键字表明了一个信息块的开始,这些信息指明了如何编译资源文件。END 标示该信息块结束。
TARGETPATH
该关键字用来指定被编译后的资源文件的位置。注意: 由于安全方面的考虑,所有的可执行代码(exe或dll)都从手机上的/sys/bin/ 目录运行。可执行代码不需要用该关键字指定位置。TARGETPATH 关键字仅仅用来指定编译后的资源文件的位置。
HEADER
这是一个可选的关键字,当它被使用的时候,系统将会在/epoc32/include/路径下创建资源头文件(.rsg)。这个头文件包含了允许以C++代码引用特定资源的标识符。
LIBRARY
这个关键字列出了应用程序需要链接的库文件。
STATICLIBRARY
该关键字用来指定需要被静态链接的库文件 (库文件中的代码会被链接到您的程序中,而不是需要时才装载到内存)。
START BITMAP…END
这一节包含了应用程序图标所使用的位图(bitmap),以及如何将这些位图编译成.mbm(Symbian系统专有的图像格式)的方式。
EPOCSTACKSIZE
该关键字是可选的,我们上面的例子中并未用到。在以前的Symbian OS 版本中,缺省的栈大小为0X5000字节。在v9.1版本中,缺省值为0x2000。为了增加栈的大小,可以使用该关键字。例 如:EPOCSTACKSIZE 0x5000 。要注意的是, 对栈设置仅仅对真实设备有效,但对模拟器无效。
EPOCHEAPSIZE
该关键字也是可选的,我们上面的例子中并未用到。这个关键字指定了应用程序可以使用的最大、最小堆空间。缺省情况下,4K为最小的尺寸,1M为最大的尺寸。
5. GCCE版本和ARM版本:
在真实设备上运行的程序版本不同于我们在模拟器上运行的程序版本,在设备上运行的版本必须是GCCE版本或ARM版本。其中GCCE版本是用SDK 自带的编译器的,使用它不需要付费,而ARM版本是专门针对ARM 平台的,代码经过优化,性能优于GCCE版本的程序,但需要付费
6. .sis 和 .pkg
创建应用程序的GCCE 版本以后,需要创建一个Symbian 安装文件(.sis)。从本质上来讲,.sis文件只是一个压缩文件, 它包含了组成应用程序所需的exe,dll,rss文件,和一些手机接收应用程序时所必须的信息(例如:语言种类,应用程序的UID)。现在的问题是,我 们根据什么信息来创建这个sis文件呢?答案在于pkg文件, 在创建这个文件之前,先需要创建一个pkg文件,pkg文件中包含了一些有用的信息,包括将工程文件拷贝到手机的哪个目录下面,程序的版本号等
7. Sign
在开发s60 3rd版本的应用程序时,所有的 .sis 文件在安装到手机之前,必须被签名.如果您的程序没有用到capability或只用到了对所有的用户都开放的功能(utility),您可以使用自签名 认证(Self Signed certificate)。当在自己的手机上调试程序时,这种方法特别管用.