symbian系统开发教程(一)

第一章:Symbian OS简介
作者:谢兴        enigma19971@hotmail.com
                                        ---转载需注明出处      下载word文档
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
您可在以下网站查到每一系列S60 SDK 所包含的手机型号列表:www.symbian.com/developer/sdks/sdks_series60.asp
其它大部分基于Symbian OS 的手机采用笔控输入的UIQ 用户界面。以下网站列出了基于各版本的UIQSDK 的手机机型www.symbian.com/developer/sdks/sdks_uiq.asp
您可以到以Nokia的网站下载SDK www.forum.nokia.com
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
该关键字指明了目标文件(exedll文件)的名称。
TARGETTYPE
该关键字指明了工程所产生的目标文件的类型,在上面的例子中,我们生成了一个可执行文件。在大多数情况下,目标文件的类型为dll,exe或是其他的插件(plugin)。
UID
目标(通常指可以执行的.exe.dll文件)具有三个UID,这些UID用来标识组件,第一个UID是无须指定的。因为它是编译工具根据目标的类型自动分配的。所以这里所指定的实际上是UID2,这个值进一步指明了目标的类型,上面例子中,值(0x100039CE)指明了目标文件是一个应用程序,Symbian系统使用这个值来标识所有的应用程序。下一个指定的UID 对每个应用程序来说都是唯一的。它标识了这个应用程序的注册资源文件和该程序的安装包文件.pkg。所以为了保证这个值的唯一性, 您必须要向Symbian申请这个UID,由他们负责从数据库中为您的应用程序分配一个UID。可到Symbian的网站上了解更多的相关信息。有一些UID的值是用来测试的,例如SDK中的例子:文件系统浏览应用程序(filesystem browser)所使用的UID0xE80000A6, 您也可以在测试您的应用程序的时候使用这个值,但注意,不要在您的最终产品中使用它。  
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
该关键字用来指定被编译后的资源文件的位置。注意: 由于安全方面的考虑,所有的可执行代码(exedll)都从手机上的/sys/bin/ 目录运行。可执行代码不需要用该关键字指定位置。TARGETPATH 关键字仅仅用来指定编译后的资源文件的位置。
HEADER
这是一个可选的关键字,当它被使用的时候,系统将会在/epoc32/include/路径下创建资源头文件(.rsg)。这个头文件包含了允许以C++代码引用特定资源的标识符。
LIBRARY
这个关键字列出了应用程序需要链接的库文件。
STATICLIBRARY
该关键字用来指定需要被静态链接的库文件 (库文件中的代码会被链接到您的程序中,而不是需要时才装载到内存)
START BITMAP…END
这一节包含了应用程序图标所使用的位图(bitmap),以及如何将这些位图编译成.mbmSymbian系统专有的图像格式)的方式。
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://www.mzph.cn/news/455125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习的动力

要有自学的意识&#xff0c;这是一个知识不断更新、不断涌现的时代&#xff0c;大学里的很多知识是过时的&#xff0c;就算入校时是热门行业的但很可能四年后毕业找工作时已经变成了夕阳产业&#xff0c;学习是一种能力&#xff0c;但首先是一种态度&#xff0c;一个人想在快速…

H264基本概念之 宏块、片和片组

这几个概念对比音频信号处理可是全新的&#xff0c;下面简要介绍一下定义和作用&#xff1a; 1、宏块&#xff08;Macro Block&#xff09;&#xff1a;一个编码图像首先要划分成多个块&#xff08;4x4 像素&#xff09;才能进行处理&#xff0c;显然宏块应该是整数个块组成&…

CodeVS 1044 拦截导弹(DP)

题目大意&#xff1a; http://codevs.cn/problem/1044/ 第一问题就是求序列的最长递减数列的长度&#xff0c;第二问就是求数列的最长递增序列的长度。 代码&#xff1a; #include <iostream>using namespace std;int arr[30] {0}; int dp[30] {0}; int mp[30] {0};in…

链表(Linked List)之单链表

原文地址:传送门 链表(Linked List)介绍 链表是有序的列表&#xff0c;但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域&#xff0c; next 域&#xff1a;指向下一个节点. 如图&#xff1a;发现链表的各个节点不一定是连续存储…

链表(Linked List)之双向链表

双向链表应用实例 使用带head头的双向链表实现 –水浒英雄排行榜 管理单向链表的缺点分析: 单向链表&#xff0c;查找的方向只能是一个方向&#xff0c;而双向链表可以向前或者向后查找。 单向链表不能自我删除&#xff0c;需要靠辅助节点 &#xff0c;而双向链表&#xff…

H264 解码耗时分析

在数字基带处理器上代码的最佳放置 美国模拟器件公司 Jose Fridman   在手机等嵌入式系统中&#xff0c;除了处理器执行时间外&#xff0c;最重要的资源就是设备总线和存储器接口。本文将介绍一种在使用指令高速缓存时其带宽消耗的基础上&#xff0c;统计分析高速缓存所采用…

链表(Linked List)之环形链表

原文地址:传送门 单向环形链表应用场景 Josephu(约瑟夫、约瑟夫环) 问题 Josephu 问题为&#xff1a;设编号为1&#xff0c;2&#xff0c;… n的n个人围坐一圈&#xff0c;约定编号为k&#xff08;1<k<n&#xff09;的人从1开始报数&#xff0c;数到m 的那个人出列&…

免费SSL证书(支持1.0、1.1、1.2)

由于公司要开发微信小程序&#xff0c;而微信小程序的接口需要https协议的&#xff0c;并且要支持TLS1.0、TLS1.1、TLS1.2。如果仅仅是为了开发小程序&#xff0c;安全等级又不用太高&#xff0c;可以选择免费的SSL证书 在这里选择腾讯云的证书&#xff0c;申请在 https://cons…

使用栈来完成一个表达式的结果

原文地址:传送门 使用栈来完成一个表达式的结果 使用栈完成计算 一个表达式的结果 7*2*2-51-53-4 &#xff1f; 32*6-2[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzPnJzRe-1614845779689)(https://victorfengming.gitee.io/data_algorithm/i…

Python 关于bytes类方法对数字转换的误区, Json的重要性

本文起源于一次犯错, 在发觉bytes()里面可以填数字, 转出来的也是bytes类型, 就心急把里面的东西decode出来. 结果为空.搞来搞去以为是命令不熟练事实上错在逻辑.a1 bytes(11, encodingutf-8) print(a1)b1 a1.decode()print(b1)a2 bytes(11) print(a2)b2 a2.decode() print…

psnr 计算

PSNR是“Peak Signal to Noise Ratio”的缩写&#xff0c;峰值信噪比。psnr一般是用于最大值信号和背景噪音之间的一个工程项目。 PSNR计算公式如下&#xff1a; 8bits表示法中&#xff0c;peak的最大值为255&#xff1b;MSE指Mean Square Error&#xff08;均方误差&#xff0…

光源时间_缩短背光源的使用寿命的原因

许多场所都会使用到led这种产品&#xff0c;这种产品经常用于背光的照亮中。但是由于使用led的局限性较大&#xff0c;所以led逐渐被背光源这种产品所代替&#xff0c;常常用于背景的照亮让宣传图可以展现出更好的视觉&#xff0c;这也是许多人选择背光源的原因。那么&#xff…

递归应用场景和调用机制

原文链接:传送门 递归 迷宫问题(回溯) 概念 简单呐的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁. 案例-递归调用机制 打印问题 public static void test(int n){if(n>2){test(n-1);}System.out.print…

八皇后问题分析与Java实现

原文链接:传送门 八皇后问题 八皇后问题&#xff0c;是一个古老而著名的问题&#xff0c;是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出&#xff1a;在88格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c;即&#xff1a;任意两个…

单例模式之恶汉模式(详解)

一.设计模式 概念&#xff1a;设计模式是一套被反复使用、多人知晓的、经过分类编目的、代码设计经验的总结。 目的&#xff1a;是用设计模式可以重用代码&#xff0c;让代码更容易被他人理解&#xff0c;保证代码的可靠性。 二.为什么要使用单例模式&#xff1f; 如果创造出多…

迷宫回溯问题分析和实现

原文链接:传送门 迷宫问题 说明: 小球得到的路径&#xff0c;和程序员设置的找路策略有关即&#xff1a;找路的上下左右的顺序相关再得到小球路径时&#xff0c;可以先使用(下右上左)&#xff0c;再改成(上右下左)&#xff0c;看看路径是不是有变化测试回溯现象思考: 如何求出…

canvas clear 指定属性的元素_好程序员web前端分享CSS属性组成及作用

好程序员web前端分享CSS属性组成及作用学习目标1、css属性和属性值的定义2、css文本属性3、css列表属性4、css背景属性5、css边框属性6、css浮动属性一、css属性和属性值的定义属性&#xff1a;属性是指定选择符所具有的属性&#xff0c;它是css的核心&#xff0c;css2共有150多…

排序算法介绍和分类

原文链接:传送门 排序算法的介绍 排序也成排序算法 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 排序的分类&#xff1a; 1) 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。 2) 外…

认识高清视频编码(MPEG、H.264、WMV-HD、RMVB)

文章出处&#xff1a;www.net1980.com 原创 最近两年&#xff0c;“高清”这个词语非常火热&#xff0c;已经成为家电和IT行业的最新潮流了。高清视频和普通视频有什么区别呢&#xff1f;主要是分辨率上的区别&#xff0c;720P视频的分辨率为1280X720&#xff0c;1080P视频的分…

解读SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC

SPP与SPPF 一、SPP的应用的背景 在卷积神经网络中我们经常看到固定输入的设计&#xff0c;但是如果我们输入的不能是固定尺寸的该怎么办呢&#xff1f; 通常来说&#xff0c;我们有以下几种方法&#xff1a; &#xff08;1&#xff09;对输入进行resize操作&#xff0c;让他们…