Symbian开发,从目前来看使用Carbide IDE可能是最好的选择了,虽然以前我一直使用Visual Studio 2003 + Carbide.vs,从目前开发过程中,对资源的加载的支持,对QT移植的支持。都比以前有了地步,用通俗的话说,不这样进步,以后还怎么混呀!看看Android,Blackberry,wince,开发环境都越来越好。
这个开发环境要安装以下过程:
安装Perl
安装SDK
安装OpenC/C++
安装Carbide IDE
安装一系列补丁(如果想支持QT开发)
安装QT for Series(如果想支持QT开发).
上述安装,可以参考我的另一篇Blog:
http://www.cnblogs.com/windwithlife/archive/2009/07/01/1514882.html下面我们简单来使用它:
根据可视化向导,通过File->New->Symbian OS C++ Project菜单,创建一个简单的程序。
在弹出对话框中,选择一个S60下的,GUI Application
Next , 录入项目名HellowWorld
选择SDK为 S60_3rd_FP1
Next,在对话框的 Message text中写入 Hello World
Click "Finish"
然后,在Project菜点中 Build并运行之,Hello World就这样显示出来 了。
下面提起一些经常使用,却常遇到问题的地方:
1, 在工程中导入图片资源:
a),将一bmp图片(一定要是bmp格式,名字最好为英文)copy 工程名(HelloWorld)\gfx 目录下,CarbideIDE中 双击打开group下面的 工程名.mmp 文件,在mmp的视图中选择 Sources tab页,选择右边的 Bitmaps,如果下面没有任何mbm文件,就添加一个;如果有了直接双击打开。在弹出的对话框中选择Add From Project,(也可以Add from FileSystem选择一个bmp文件)选择你刚刚拷贝到gfx目录下的bmp图片就可以了。重新编译,会在你的SDK目录下,一般是C:\Symbian\9.2\S60_3rd_FP1_6\Epoc32\include目录下自动生成工程名.mbg文件,里面是定义了一些enum变量对应你加入的图片id,在代码中你可以使用这些id来引用图片资源。
c),这样你就可以在项目中如下代码所示装载图片了:
_LIT (KAllImageNames,"
\\System\\Apps\\工程名\\工程名.mbm");
CFbsBitmap* iFbsBmp = m_EikEnv.CreateBitmapL(KAllImageNames, 图片id);
是不是觉得这些目标难以理解,Symbian就是这样,编译文件,中间文件,目标文件,乱七八糟,这并不是一些光荣的事件,奇怪为什么网上有一些高手就喜欢这样。
2,在工程中加入中文字符串:
a),只能使用utf8格式的中文字符文本,所以你需要将文本格式(gb2312)的文本文件转换成utf8才能在工程中使用。具体操作见下。
b),在data目录中添加文本文件: language_CN.txt,内容如下:(一定要在文件中加入CHARACTER_SET UTF8)
...
CHARACTER_SET UTF8
#define qtn_ok "确定"
#define qtn_cancel "取消"
c),使用一些命令来转换,写一个converter.bat,内容如下:
@echo off
charconv -input=gb2312 language_CN.txt-output=utf8 language_CN.txt.loc
pause
d),运行此bat,就可以在data目录下生成language_CN.txt.loc文件,打data/工程名.rss文件,添加包含
#include "language_CN.txt.loc"
再在下方的Resources for messages处添加以下内容:
RESOURCE TBUF32 r_form_ok { buf=ok; }
RESOURCE TBUF32 r_form_cancel { buf=qtn_cancel; }
e),这时重新编译项目,就会在工程名_XXX.rsg文件中生成字符串资源ID
#define R_FORM_OK 0x5edfa335
#define R_FORM_CANCEL 0x5edfa375
f), 这样在项目中你就可以通过如下代码来使用中文字符串了。
HBufC* pFormat = StringLoader::LoadLC(R_FORM_OK);
3),发布到手机上,在Carbide.c++中右击项目,在弹出菜单中选择项目属性Properties,选择
Carbider.C++栏目下面的Build Configurations,在右边的Configuration中选择Phone Release
(GCCE) ,然后在下面的SIS Builder中Add新的sis,选择sis\项目名_s60_.._.pkg文件,然后OK,
Apply,OK,重新编译就会在sis目录下生成:
项目名_s60_.._.sis
项目名_s60_.._.six
两个文件,将它们拷贝到手机上就可以安装应用程序了
下面从网上找了一段不错对Symbian介绍的文章觉得不错,转载一下:
1.1. Symbian系统简介
当前有很多手机运行Symbian OS,数量甚至超出您的想象。到目前为止已经有超过7500 万、100 多种型号的手机运行Symbian OS。这些电话大部分都形态迥异:有的配有键盘,有的采用笔控输入;有的配备TFT 彩色屏幕,有的则配备黑白LCD 显示屏;有的擅长于音乐播放,有的专注于电子游戏、图像处理甚至电视功能;有的手机面向个人消费者,有的专门针对商务用户;有的是为单手操作设计的,有的是为双手操作设计的——种类繁多不一而足。Symbian OS 手机受到广大消费者的喜爱。仅2005 年就售出3400 万部Symbian OS 手机——这相当于每不到一秒钟就有一部Symbian OS 手机被出售。网络运行商同样青睐Symbian OS 手机。全球有250 多个移动电话网络运行商选择了Symbian OS 手机。所有这些都表明现在市面上有成千上万的手机是基于Symbian OS 的,所以为symbian系统开发的应用程序会得到广泛的应用。现在已经有5400 多种商业性应用软件可供Symbian OS 手机应用。本教程旨在为您提供一些编写Symbian OS 应用程序的入门知识。希望它会对您有所裨益,为开发Symbian OS 应用程序打下一个良好的基础。
1.2. 开发语言
从开发初期起,Symbian OS 就是专门为移动电话而设计的,因此从弹性的电源管理(resilient power-management)到内存资源的谨慎使用,全都是为了满足手机操作系统的特定需求。作为Symbian OS 的开发人员,您将受益于Symbian OS 这样一个专门为移动设备而创立并随着市场一起发展的开发平台。Symbian OS 最“基本”的编程语言是一种改进的C++。Symbian OS C++ 经过特殊设计与优化,以利于降低手机电池能耗和内存使用。比如,为了节约电池耗电,所有Symbian OS 程序都是基于事件(event-based) 的,而当没有任何程序进行事件处理时,CPU 就进入休眠。您在开发软件时也可以使用Java、Python、.NET(使用Visual Basic 和带AppForge’s Crossfire 的C#)、Perl、OPL和Adobe Flash,但是Symbian OS C++ 是最强大(它允许最大限度的利用操作系统提供的所有功能)也是最快捷(因为它直接以编译码运行,而无需在运行时进行解译)的语言。这也就是为什么我们在本书中选择C++ 来向您演示如何进行Symbian OS 开发的原因。好了,闲言少叙,让我们言归正传。
1.3. 准备工作
首先您需要有一台电脑能创建并测试在Symbian OS 手机上运行的应用程序。这也就是说电脑要有一个较快的CPU 处理器(至少1.5GHz)和相当大的RAM(512MB或更大)以及一个大容量硬盘(至少有2GB 剩余空间)。该电脑必须能运行Windows 2000 或XP 操作系统。然后您需要开发软件来帮助您编写代码并进行编译。这可通过包含编辑程序(editor)、编译程序(compiler) 和链接程序(linker) 的集成开发环境(IDE) 来完成。在这推荐两种适合Symbian OS 程序开发的IDE。对于开发非商业用途的Symbian OS 应用程序,Nokia 的Carbide.c++ Express 版本是最理想不过了,它建立在Eclipse IDE 的基础上,供免费下载。对于使用Visual Studio.NET 2003 的程序员来说,也可选择Carbide.vs。这是一套基于Microsoft Visual Studio .NET2003 IDE 的工具,用于开发S60 和Series 80 软件。您还需要软件开发包(SDK), 专门用来编写和创建Symbian OS 应用程序。基于不同手机类型,有不同版本的SDK 供选择,具体使用哪个SDK 请见以下几页的说明。如果您还没有决定具体的手机类型或平台而无法确定选择哪个SDK,我们建议您一开始可使用S60 和UIQ SDK。如果您想为最新款的手机(如Nokia 3250、E60、E61、N71、N80、N91、N73 或N93)编写应用程序,那就选择基于Symbian OS v9 的SDK(UIQ 3 或S60 第三版),要么您就选择更低版本的SDK(UIQ 2.1 或S60 第二版)。
不同版本的Symbian OS 之间有什么区别?主要的分别是,在Symbian OS 9.1 版本之前,为较低版本的Symbian OS编写的软件往往可在较高版本上运行,但9.1 版本与以往的版本截然不同。如要运行在9.1 版的Symbian OS 上,应用程序必须稍加修改并进行再次编译。 接下来您需要下载您所选择的IDE 和SDK。以下章节将向您介绍如何在互联网上找到这些工具。
1.4. S60 平台
S60 平台是一个完整的应用程序包(package),用户接口和构建于Symbian 系统技术的开发工具。S60 用户接口 (UI) 经过精心的设计,方便用户使用,便于单手操作。从用户的角度看来,该平台最大的特点在于它的用户界面:大的彩屏和各种输入键(两个软件键, 五方位的导航键,和几个专用的键)。 单手操作和大彩屏的优点能使应用程序开发者提供更有吸引力的内容和提供更方便的导航功能,同时增加用户使用手机时的愉快体验。
目前,s60平台上已经存在各种各样的应用软件. 其中最重要的有:高级智能电话应用程序,个人信息管理应用程序(PIM)(例如, 电话簿,日历, 相册), 短信, 网页浏览, 电子邮件和应用程序安装引擎,它能够让您自由地从电脑上下载软件到您的手机上。
S60 第三版本支持两种不同的外观:
Ø QVGA Portrait (240x320)
Ø QVGA Landscape (320x240)
1.5. 如何选择SDK
基于Symbian OS 的手机外型各异,用户界面(UI) 也不尽相同。为了给特定的用户界面编写应用程序,您必须选择特定的SDK(尽管应用程序的引擎往往与用户界面无关)。大部分运行Symbian OS 的手机采用的是S60 用户界面并使用键盘操作。S60 已经发布了一系列版本,选择正确的S60 SDK 和相应的Symbian OS 十分重要:
S60 第三版– Symbian OS v9.1
S60 第二版功能包3 – Symbian OS v8.1
S60 第二版功能包2 – Symbian OS v8.0a
S60 第二版功能包1 – 升级Symbian OS v7.0s
S60 第二版– Symbian OS v7.0s
S60 第一版– Symbian OS v6.1
1.6.Carbide.c++ 集成开发环境(IDE)
前面已经提到了各种集成开发环境,这里我们主要介绍Carbide.c++的集成开发环境。Carbide.c++的集成开发环境(IDE)基于Eclipse集成开发环境版本3。增添了能使Eclipse处理symbian c++ 源文件和编译Symbian工程的插件。这些插件分为以下几类:
Ø C/C++开发工具箱(CDT)。这是一个使得Eclipse管理和编译symbian工程的工具集
Ø Symbian插件。这些插件由symbian开发,使得eclipse能够处理Eclipse C++的概念,同时提供对Symbian操作系统软件开发工具箱和Symbian工具链的支持。
Ø Nokia插件。由Nokia开发,提供对Symbian操作系统工具箱的更多支持。插件实现了C++编译器,symbian系统的调试器,并且加入了Carbide.c++系列产品的商业版本的高级特性。
很明显,因为Carbide.c++是基本的Eclipse集成开发环境,开发者可以进一步定制其它的商业或免费的插件,比如说,一个版本控制系统,一个UML建模系统等。
Carbide.c++有自己的安装程序,所以安装比较简单。在启动这个产品之后,用户看到的集成开发环境和Eclipse开发环境十分类似,如下图所示,因为Carbide.c++是设计用于处理symbian c++应用程序的,所以其集成开发环境的左边显示的是c/c++工程视图,这个视图用于显示构成一个典型symbian c++工程源文件、头文件,资源文件。
关于eclipse平台和插件的相关知识,不是本教程所关心的重点, 有兴趣的读者可参考相关的其他著述。
1.7. 开发环境的构建
Ø 第一步:安装JDK5.0
Ø 第二步:安装ActivePerl(需要5.6.1以上版本)
Ø 第三步:安装Symbian sdk
Ø 第三步:安装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工程相关:
如果,需要在命令行编译工程,必须创建如下两个工程文件:
· 工程定义文件 (.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.mbm TARGETPATH \resource\apps HEADER SOURCEPATH ..\gfx SOURCE C16 folder.bmp SOURCE C16 file.bmp SOURCE 8 mask.bmp END
LIBRARY euser.lib efsrv.lib cone.lib eikcore.lib eikcoctl.lib eikdlg.lib egul.lib eikctl.lib apparc.lib LIBRARY bafl.lib LIBRARY 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 2nd版本 和 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目录中)。
然后,一直点击“下一步”按钮,直到这个过程结束。如果工程被成功导入,在左边的工程视图中会出现该工程的信息。
出处:
http://blog.csdn.net/wh_xiexing/archive/2007/11/15/1887002.aspx