文件目录 存放文件类型 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工程相关: 如果,需要在命令行编译工程,必须创建如下两个工程文件: · 工程定义文件 (.mmp file),这个文件对要编译的工程进行描述,并定义要构建的资源文件。该文件是环境无关的,编译工具用它来生成针对各种目标环境下的make files文件。 · 组件描述文件(bld.inf), 这个文件列出了一组相关的工程, 并包含一些编译指令. CodeWarrior 和 Carbide.c++ 都能够导入工程定义文件,并用它来在IDE环境下创建工程。下面详细描述这些文件的格式。 Ø 组件(component)描述文件: bld.inf Bld.inf 是一个文本文件。它的内容非常繁琐,主要包括工程定义文件mmp和其他的任何编译工具所需要的文件。该文件分为多个节,其中,mmp文件列表在PRJ_MMPFILES节中。即使一个工程文件只包含一个mmp文件,bld文件仍然是必须的。下面是一个典型的bld.inf文件。 // 目标平台 PRJ_PLATFORMS WINSCW GCCE// 从工程中输出的文件 PRJ_EXPORTS // None// 工程定义文件PRJ_MMPFILES filebrowseapp.mmp// 工程定义文件(测试代码用)PRJ_TESTMMPFILES ../test/FileBrowseTest.mmp 在上面的例子中, 如PRJ_PLATFORMS 声明所示,默认情况下工程被编译为针对WINSCW平台和 GCC-E平台的执行代码。 当您用CodeWarrior为模拟器编译代码的时候,您使用的是WINSCW 平台, WINSCW的来由是,最终的代码运行于Windows, 单线程模式(in a Single process),并用CodeWarrior编译。 平台的名称用来标识最终的可执行代码所运行的那个平台。 所以, 当上面的代码被编译完后,可执行程序被放在 /epoc32/release/winscw 目录下面(根据是调试(debug)版本还是释放(release)版本,被放在 /udeb 或 /urel 子目录下面)。 如果代码是针对手机硬件的,需要选用GCCE平台。这时,最终的可执行代码被放到/epoc32/release/gcce/目录下面。 Ø 工程描述文件 (mmp) mmp 文件中的每个语句都以一个关键字开头。下面是一个典型的mmp 文件的例子。 // filebrowseapp.mmp TARGET filebrowseapp.exe TARGETTYPE exe UID 0x100039CE 0xE80000A6 VENDORID 0 #ifdef __WINSCW__ CAPABILITY AllFiles // AllFiles on emulator since no signing is required #else CAPABILITY NONE // No capabilities on hardware - otherwise SIS file signing is required #endif SOURCEPATH ../src SOURCE FileBrowseAppUi.cpp SOURCE FileBrowseDocument.cpp SOURCE FileBrowseApplication.cpp SOURCE FileBrowseBaseView.cpp SOURCE RFsEngine.cpp SYSTEMINCLUDE /epoc32/include USERINCLUDE ../inc SOURCEPATH ../data START RESOURCE filebrowseapp.rss TARGETPATH /resource/apps HEADER END START RESOURCE filebrowseapp_reg.rss TARGETPATH /private/10003A3F/apps END START RESOURCE filebrowseapp_loc.rss TARGETPATH /resource/apps LANG SC HEADER END START BITMAP filebrowseapp.mbmTARGETPATH /resource/appsHEADERSOURCEPATH ../gfxSOURCE C16 folder.bmpSOURCE C16 file.bmpSOURCE 8 mask.bmpENDLIBRARY euser.lib efsrv.lib cone.lib eikcore.lib eikcoctl.lib eikdlg.lib egul.lib eikctl.lib apparc.libLIBRARY bafl.libLIBRARY avkon.lib CommonEngine.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 中的例子:文件系统浏览应用程序( filesystem browser )所使用的 UID 为 0xE80000A6, 您也可以在测试您的应用程序的时候使用这个值,但注意,不要在您的最终产品中使用它。 SECUREID 这是个可选的关键了,上面的例子中没有出现。该关键字为应用程序定义了安全标示符,用来指明这个程序可以访问哪个私有的目录。如果该关键字没有使用,用 UID3 来代替该关键字。 VENDORID 该关键字是在 Symbian OS v9.1 版本新增的。用来指定软件提供商的 ID 号。该关键字不是必须的,可省略。 CAPABILITY 这是 Symbian OS 9.1 新增加的关键字。 该关键字指明了应用程序的权限(或称作能力, 如:查看系统目录)。大上面的例子中 , 应用程序在模拟器上和在手机上被分配了不同的能力( capability )。在模器上,该程序被赋予了 AllFiles 的权限 , 比在手机上运行时,能看到更多的私有文件系统的区域。没有被赋予 AllFiles 能力的程序不能看到 /Sym 目录下的内容。 应用程序只有在经过认证( certificate )以后才能获得 AllFiles 的能力。关于认证和签名的内容,我们在这一章的后面会讲到。 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 为最大的尺寸。 1.9. 第一个程序: HellowWorld 1.9.1. 创建工程 运行 Carbide 集成开发环境,在菜单栏上选择file->New->Symbian OS C++ project,出现如下图所示的对话框: 我们选择带用户界面设计器的图形用户界面应用程序( Carbide Express 版本不支持用户界面设计的功能)。然后点击“下一步”按钮。出现下面的对话框: 用户选择一个 sdk的版本(笔者的机器上安装的是s60_3rd_FP1版本的sdk)。继续下一步: 按下一步,继续: 选择一个空的界面,这样我们可以自由地在上面添加控件。下面的步骤一直按“下一步”,直到完成。 1.9.2. 在模拟器上运行和调试 工程建立完成后,就可以构建( build)工程了。在将程序放到手机上运行之前,我们通常需要先在模拟器上运行、调试程序。模拟器是SDK附带的一个软件,能够模拟真实手机的运行情况。 在工程透视图中,选中工程,点击右键,将活动构建设置为 Emulator Debug(Winscw)。如下图所示: 这样,编译出来的程序版本才是针对模拟器的。设置后,可以构建( build)工程了:在工程透视图中选中工程,点击右键,选择“build Target Only”(只编译模拟器版本,节省时间)。 最后,点击工具栏上的运行按钮 ,选择Run As->1 Run Symbian OS Application Carbide 启动模拟器, 这个过程需要持续几十秒到几分种,依赖机器的配置。在模拟器启动后,点击模拟器上的软件键 ,模拟器会出现下面的界面: 选择 Installed 选项后,可以看到应用程序的图标: 在模拟器上点击按钮,运行该程序。 1.10. 在手机上运行和调试 1.10.1. 基本概念 能够在模拟器上运行、调试程序后,您可能想要在真实的手机上运行您的程序。但在这之前,先需要搞清以下几个基本概念: Ø GCCE版本和ARM版本: 在真实设备上运行的程序版本不同于我们在模拟器上运行的程序版本,在设备上运行的版本必须是 GCCE版本或ARM版本。其中GCCE版本是用SDK 自带的编译器的,使用它不需要付费,而ARM版本是专门针对ARM 平台的,代码经过优化,性能优于GCCE版本的程序,但需要付费。 Ø .sis文件和.pkg: 创建应用程序的GCCE 版本以后,需要创建一个Symbian 安装文件(.sis)。从本质上来讲,.sis文件只是一个压缩文件, 它包含了组成应用程序所需的exe,dll,rss文件,和一些手机接收应用程序时所必须的信息(例如:语言种类,应用程序的UID)。现在的问题是,我们根据什么信息来创建这个sis文件呢?答案在于pkg文件, 在创建这个文件之前,先需要创建一个pkg文件,pkg文件中包含了一些有用的信息,包括将工程文件拷贝到手机的哪个目录下面,程序的版本号等。 Ø 签名(sign): 在开发 s60 3rd版本的应用程序时,所有的 .sis 文件在安装到手机之前,必须被签名。如果您的程序没有用到capability或只用到了对所有的用户都开放的功能(utility),您可以使用自签名认证(Self Signed certificate)。当在自己的手机上调试程序时,这种方法特别管用。 Ø 机上调试代理(on-device debug agent): 如果想要在真实的手机设备上调试程序,需要在手机上安装机上调试代理,这个手机上的代理程序通过蓝牙或USB串行链路与调试器通信,在Carbide.c++调试器和目标机器之间的起到接口的作用。调试代理提供以下功能: 1. 运行在 Symbian 系统上作为调试代理。 2. 为 Symbian系统提供一个稳定的集成的接口 3. 能被用来在真实的设备上调试应用程序 4. 能烧入到系统镜像中,或是被安装的 sis文件。 使用机上调试代理, 我们可以使用Carbide.c++ 集成开发环境来调试运行在手机硬件上的应用程序,这使得调试过程更为容易。机上调试代理可以在所有的S60 3rd 版本的设备上工作。包括在 UIQ 2 nd版本 和 UIQ 3rd 版本的设备上。 1.10.2. 编译、运行应用程序的手机版本 在清楚这些基本的概念后,下面我们看看,如何编译和运行 GCCE版本的应用程序: 1. 编译这个应用程序的GCCE版本. 2. 创建Symbian 安装文件(.sis)。 3. 给.sis文件签名。 4. 在s60手机上安装这个sis文件。 5. 运行该应用程序。 首先,我们按下面的步骤,在Carbide中,编译GCCE版本和创建sis文件。 1) 从菜单上选择 Project > Properties 选项. 2) 在属性对话框上, 点击 C/C++ Build。 3) 从 Configuration 下拉菜单中选择 "S60 3.0 GCCE UREL"。 4) 点击 OK。 5) 从菜单栏上点击 Project > Build Project 。 如下图所示: Carbide 根据工程的设置,创建了一个能在手机上运行的版本。如果编译的过中没有出错,可以在目录/Symbian/9.2/S60_3rd_FP1/Epoc32/release/gcce/urel中找到已经编译好的可执行文件。然后,可以进行下一步:生成sis文件。 打开工程视图,找到sis文件夹中的 .pkg 文件,点右键,在弹出菜单中选择:build PKG file。如下图所示: 如果边编译的过程没有出错,可以在sis文件夹中找到经过签名的.sis文件和扩展名为.cer的证书文件和扩展名为.key的密钥文件。这两个文件是Carbide自动生成的。 将经过签名的.sis(或.sisx)文件通过USB接口下载 到手机( WAP, 邮件附件, 红外, 蓝牙 ),然后用文件管理器安装,如果安装的时候没 有错误提示,我们就可以在手机上运行程序了。 1.10.3. 在手机上调试 在真实的手机设备上调试比在模拟器上调试更加准确,而且不必使用昂贵的硬件调试设备。前面我们提到过,在手机上调试, 需要安装调试代理,有两不同的机上调试代理,分别为:Application TRK和System TRK · Application TRK—仅仅支持应用程序的调试。 · System TRK—不但支持应用程序的调试,还支持有限的ROM调试。设备制作商可用它来调试设备驱动程序。 现在,我们来看看: Ø 如何在手机上安装调试代理软件 打开..Carbide/plugins/com.nokia.Carbide.trk.support_1.2.0.29/trk/s60目录,可以看到有一个s60_3_1_app_trk_2_7.sisx文件,该文件就是调试代理(debug agent)的安装程序,下面我们通过USB接口(或红外、蓝牙)将这个程序下载到手机上安装。步骤如下: 1. 将电脑和手机设备通过USB接口连接。 在手机识别出USB连接线后,设置手机,让它从PC上接收文件。 1) 选择 USB Mode > File Transfer, 然后按OK键,这时有通知消息出现:手机将处于离线状态。 2) 按 OK 软件键确认该消息。 2. 将SISX 文件拷贝到MMC 卡。 3. 用“安全删除硬件”的方式断开手机和PC 之间的USB连接。 4. 在手机上,用文件管理器安装SISX文件 。 Ø 在安装好调试软件后,现在就可以开始调试程序了。 PC 和手机的通信接口有两种:蓝牙和USB,由于大多数的PC机中只有USB接口,下面我们就以USB连接方式来调试程序。 1. 安装最新的USB连接软件,例如,S60设备使用的Nokia PC 套件。 2. 用USB线连接Pc 和手机。 3. 目标设备被连击后,在S60设备上,选择PC套件作为USB连接模式。 4. 下载APP TRK 或 System TRK SISX 文件到手机上。(如果在已经下载安装过该调试代理,这一步可省略) 5. 在PC 上,打开设备管理,找到S60 手机USB的条目,如下图所示: 记下端口号(在我们的例子中为COM5),后面我们要用到。 在手机的USB模式列表上选择PC套件模式。然后在手机上启动App TRK,将连接方式设置为USB,如下图所示:
选择“back”,然后重新启动App TRK。 在Carbide集成开发环境上(IDE),选择工具栏上的 调试按钮,选择“debug”,如下图: 这时,会启动一个“调试面板”,我们选择第一项:“Symbian OS App TRK”,双击此项,将会生成一个启动配置项(launch Configuration),在这个面板的右边有一些关于调试的选项,如下图所示: 安装要求填写这些配置项, 这一步比较容易,有两点要注意的是:Connection 面板中,Serial port选择的值(这里为com5)必须是我们前面在设备管理器中所记录下来的值。另外,在Installation面板中,需要指明要安装的文件,这个文件就是我们在前面生成的经过签名的sis文件,如下图: 1.11. 用命令行方式编译、运行GCCE释放版本 下面我们以SDK自带的 helloworldbasic工程为例子,演示如何用命令行的方式来编译和运行GCCE版本的程序。 Ø 第一步:创建GCCE释放版本: 1. 打开一个命令行窗口。 2. 用 cd group 进入工程的group 目录。 3. 输入下面的命令 : bldmake bldfiles。 4. 再输入 :abld build gcce urel 或 abld gcce udeb (该命令产生手机上的调试版本 )。上面的编译脚本创建了一个GCCE版本的应用程序,在下面的目录可找到该文件: Epoc32/release/gcce/urel/ Ø 第二步:创建sis文件 我们通过使用makesis工具来编译.pkg文件得到.sis文件,在我们的例子中,该pkg文件位于例子中的 /sis目录下。 1. 打开命令行窗口,并进入到 HelloWorldBasic.pkg 文件所在的路径:<S60_SDK_installation_directory>/Symbian/9.2/S60_3rd_FP1/S60ex/helloworldbasic/sis 2. 输入 makesis helloworldbasic.pkg 命令: 3. 我们可以看到,在该文件夹下生成了一个helloworldbasic.SIS 文件。 Ø 第三步:用signsis工具为sis文件签名 在进行签名之前,我们需要两个文件:私钥文件和自签名证书(self signed certificate)文件。这涉及到密码学的知识,读者可自己参考相关著作。这里,我们用只是makekeys工具生成这两个文件。makekeys工具在下面的目录可找到。 <SDK_installation_directory>/Symbian/9.2/S60_3rd_FP1/Epoc32。 1. 为了产生私钥文件和自签名认证,在命令行下敲入以下命令: 运行完该命令后(可能要花几分钟的时间),可以看到,在该目录下产生了两个新的文件:mykey.key和mycert.cer。 2. 给sis文件签名,在命令行下敲入以下命令: Ø 第四步:在手机上安装sis文件。 这一步比较简单, 仅仅将准备好的sis文件下载到您的手机。这个过程可以通过不同的数据通道完成(WAP, 邮件附件, 红外, 蓝牙, USB接口), 采用何种方式,取决于您的手机。 1.12. 导入工程 如果symbian c++的开发者在自己的计算机上已经有了各种各样的symbian工程,并且用codewarrior或者命令行工具链编译过该工程,他们会发现可以很方便地移植这些工程到Carbide.c++,不需要创建一个新的工程和手工插入这些源文件。Eclipse实现了从集成开发环境导入和导出信息的框架,并通过向导来实现这个过程。Carbide.c++也实现了这种工具。从菜单栏选择File->import菜单项,用户就启动了一个有很多选项的导入面板。如下图所示: 例如:如果我们想导入sdk中自带的filebrowser的例子工程,我们在导入面板中选择Symbian OS Bld.inf file选项,然后点击下一步,这时会启动“文件导入向导”对话框,在对话框中输入filebrowser工程中的bld.inf文件(通常,这个文件在group目录中)。 然后,一直点击“下一步”按钮,直到这个过程结束。如果工程被成功导入,在左边的工程视图中会出现该工程的信息。
转载于:https://www.cnblogs.com/J2EEPLUS/archive/2010/10/17/2488115.html
相关资源:Symbian系统开发教程(1)