发新话题
打印

[教程] [集中整理,手机入门,操作技巧,问题排除]NOKIA极限教程完美版

SymbianOS 简介〖SymbianOS 简介〗


1.1 SymbianOS的六大特性

1、操作系统是运行在ROM上的
2、系统是运行在电池驱动的设备上的
3、完全是面向对象的
4、基于组件的设计
5、被设计成确保用户的数据不会丢失
6、简单的UI系统

Symbian 是真正的微核操作系统,所谓“微核”,就是说操作系统
只有很小的一部分是运行在最高优先级的,其他的功能都是以Client-
Server的方式提供。下面是Symbian系统的内部结构图:

应用层:Shell, OPL, 及其他应用程序
------------------------------------------------
系统层:Dialogs, Menu, **, Icons, Resources, JavaVM,
Grid, Rich Text, Edit Control, List Control, Application Framework,
Jave Class Libraries.
------------------------------------------------
服务层:Window Server, Process Server, Socket Server, Sound Server,
Wireless Server, Database Server, File Server, Alarm Server, Comms
Server, 以及无线协议
------------------------------------------------
内核:euser.dll, ekern.exe, 服务控制(supervisor server),
HAL(设备抽象层)
------------------------------------------------
驱动程序层:包括音频驱动,显示驱动,MMC驱动,键盘驱动,串并口驱动
,DSP驱动,时钟控制器驱动等等

1.2 Symbian UI系统命名

使用过Symbian UI系统的同志们一定都听说过一些奇怪的名字,比如:
Eikon, Cone, Apparc, Avkon等等,这么多kon字辈的东东到底有什么关系呢?

首先,大家要明白,在kon字辈的同志们中,Cone和Apparc是老大,其他kon们
都是从这两个kon继承来的。

先说说Cone。Cone就是Control Environment(控制环境)的缩写。Cone是Client
端的控制环境。这个东东定义了Graphic UI中一些基础的东西,没什么代码,
但是是一种Design pattern

Apparc是Application Architecture的缩写。Application architecture定义了
Symbian应用程序的框架。主要是定义了CApaApplication, 以及CApaDocument
这两个类,也就是d&v结构。然后还定义了程序启动以及数据控制流等等。

kon们其实就是控件组,关于控件的用法以后再说。Series60用的是Avkon,
Series90用的是Ckon,大家可以理解为不同的kon是专为不同屏幕大小的手机设
计的不同的控件库。

以Series60为例:

Avkon
-----
Eikon
-----
Uikon
-----
Cone + Apparc

   版权没有         盗版自由         任意传播        欢迎交流

TOP

〖Symbian OS内存管理介绍〗


在Symbain OS中内存管理的主要任务是:如何为程序分配内存以及如何在程序的内部分配内存。
Symbian OS 程序最根本和基础的东西就是内存,作为一个有限的资源,必须小心细致地处理,特别是当有错误或异常发生的时候。正是由于这样的原因,在支持清理机制的API中,异常处理和内存管理几乎是绑在一起的。
Uikon核心框架使用这些支持清理机制的API来管理内存,使GUI程序的基础架构具有良好的性能和表现。GUI程序还支持异常情况下内存清理,以及调试模式下的内存泄露检测。

一、Symbian OS的清理机制(cleanup)
清理机制是Symbain OS 程序对于程序异常处理的一种特有方式。当异常发生时,清理机制将清理错误的内存区域。Symbian OS的清理策略和它所有类的基类CBase类有着密切关系。要了解Symbian OS清理机制就必须清楚以下三个概念:异常处理(exception handling)、清理栈(cleanup stack)以及通用清理项(general cleanup item)。

1、异常处理 (Exception Handling)
Symbian OS没有使用C++的try…catch异常处理方式,而是使用了它自己所特有的方式:leave。在Symbian OS中,异常以 leave 的形式出现,trap harness可以在程序中设置一个点,使程序发生leave时回跳到这个点上,宏TRAP和TRAPD 可以在程序中设置这个点。调用系统API User 类的一些静态函数可以触发Leave ,例如 User:eave()方法,这就相当于主动地抛出异常,当然某些系统函数或是用户代码,也有可能发生leave。

2、清理栈(Cleanup Stack)
当 leave 发生时,任何分配了资源的heap内存,例如通过new()方法创建的对象,他们将被孤立,因为leave一旦发生已指向他们的指针就不存在了,这样就导致了内存泄漏。为了防止内存泄漏发生,程序就有要记录那些已经被创建的对象,如果程序运行发生leave,那么系统可以自动找到并清理他们所占用的内存。这些工作可以通过清理栈来完成。CleanupStack类是支持清理栈的一个类。GUI应用程序拥有一个由应用程序框架所提供的清理栈,其他的应用程序必须用CTrapCleanup 类自己构建一个清理栈。

3、通用清理项(General Cleanup Item)在默认情况下,清理栈只处理那些 CBase-based 类(也就是它所处理的类必须是由 CBase类继承下来的)和那些untyped 类型对象(用一个简单的内存释放语句就可以释放的对象)。通用清理项(General Cleanup Item)使其他类型的对象也可以放到清理栈中。TCleanupItem类是支持通用清理项的一个类。

二、Symbian OS的内存分配
内存分配管理的目的在于 能够使Symbian OS 进程通过底层函数访问和操纵内存区域。绝大多数的客户端程序不需要直接使用这些函数,那些在进程间共享内存区域以及在一个进程的线程间共享内存区域的程序会使用这些底层函数来管理内存。这里有两个概念需要了解 chunk(块) 和 heap(堆)。
1、Chunk(块)chunk 是一组线性相邻的内存地址在RAM 中的映射。进程创建以后,它的地址空间包括1到3个chunk:
(1)stack/heap chunk:这里包括了进程的主线程所要使用的stack 和 heap。所以这个chunk 通常是进程所必须的。
(2)code chunk:这个chunk 只有当进程被加载到RAM时才出现。
(3)data chunk:只有当进程拥有静态数据的时候才会有这个chunk。

当然,程序可以还创建额外的chunk。 一个全局的chunk可以被其他进程访问,这样就实现了大量内存的共享。RChunk 类提供了对chunk的支持。TFindChunk 类可以用来查找其他进程创建的全局chunk。

2、Heap(堆)
heap 通常用于显式的动态内存分配 。Symbian OS定义了C++中new操作符创建对象到当前线程的heap中。Heap的功能可以是:
?监控内存泄漏:对于一个GUI程序来说,这个是经常发生的。
?在同一进程的线程间进行共享。
?在单元一级上进行访问和操作。
RHeap类提供了对heap的支持。如果heap 是当前线程的 heap,那么使用等价系统静态方法API 的User 类 将更加方便。这些系统静态方法API 同样也提供了宏来管理内存,以防止内存泄漏。

三、进程和地址空间
Symbian OS 的程序可以包含若干进程,每个进程包含若干在概念上并发执行的线程。每一个用户进程都有他自己私有的地址空间。一个用户进程不可以直接访问另外一个用户进程的地址空间。进程包括若干线程,他们运行在进程的特权级。
Kernel 进程是一个比较特殊的进程,它的线程运行在超级访问者级别,这个进程通常包括两个线程。
Kernel server 线程:是一个原始的进程,在系统启动时就已经存在。它可以在heap执行核心函数请求的内存分配或重新分配。
null 线程:当系统中没有其他可运行的线程时这个线程就开始运行,null 线程使处理器处于空闲状态,减少耗电

线程的地址空间包括若干chunk,在刚创建的时候,进程只有一个线程和1到3个chunk。如果进程创建了新的线程,那么一个新的chunk将被创建被分配给这个线程。每一个chunk都包括一个了stack,如果线程没有共享当前heap,那么在chunk中也将包括heap。

四、Chunks(块)
Chunk 把RAM映射到一个连续的虚拟地址。一个chunk中包括了一个保留区(reserved region)和和委托区(committed region)。保留区是一个连续的虚地址区域,它的大小可能是整个chunk的大小。在委托区中存放了真正映射到RAM的地址。chunk的大小是可以被动态修改的,允许委托区也可以修改大小,他的范围是从0一直到保留区大小,是处理器页面大小的整数倍。这样,就允许进程获得更多的内存空间。通常,委托区起始地址位于保留区底部。另外还可以创建 double-ended chunk ,那么委托区将是保留区的任意连续子集,他的大小也是处理器页面大小的整数倍,这种Chunk的委托区可以有两个顶端和底端,并且它们的大小也是可变的。
在chunk创建时可以指定chunk的最大空间,保留区大小应该小于这个最大值。.尽管这样,如果保留区请求比当前chunk更大的空间,那么chunk可以被重新分配空间,以允许保留区扩大。保留区可以扩大到撑满整个chunk.。

Local chunks(本地 chunk)
如果一个chunk对于创建它的进程是私有的,不允许被其他用户进程访问,那么那么这个chunk就是本地chunk,本地chunk是没有名字的。

Global chunks(全局chunk)
如果一个chunk可以被其他进程访问,那么这个chunk就是全局chunk。全局chunk是有名字的,这样,进程可以根据chunk的名字来访问他们。当进程打开一个全局chunk的时候,他把chunk映射到自己的地址空间,这样就可以对chunk进行直接访问和数据共享了。如果已经知道了chunk的名称,那么使用 RChunk::OpenGlobal() 可以直接打开chunk.。如果只知道了chunk的部分名字,那么可以使用带 TFindChunk 型参数的 RChunk::Open()方法来打开chunk.。

五、Heaps(堆)

Each thread has a chunk which contains that thread's program stack. For the main thread of a process, this chunk also contains the thread's heap. A program's request for memory is allocated from this heap. For example, a code fragment such as:

每一个线程都有一个包含了自身程序栈(program stack)的chunk。.对于进程的主线程来说,这个chunk中同样也包含了线程heap。程序对于内存的请求都是从这个heap的地址空间来分配的,例如有以下代码:

CArrayFixFlat<...>* fixflat;
...
fixflat = new (ELeave) CArrayFixFlat<...>(3);

程序请求了heap中部分的内存地址,并把地址返回给调用者。请求heap中的内存必须是显式的,同样,释放这些内存时也必须进行显式调用。

Structure of a heap(heap 结构)
heap包括两个单元列表。一个是已经分配的内存单元列表,一个是还未分配的内存单元列表。两个列表都在heap对象上。内存单元由单元头和单元体组成,单元体实际上就是一个内存区。单元头是在e32std.h 中定义的 RHeap::SCell 结构体,他是RHeap类的一部分。

如何共享heap
heap通常被同一个进程的线程所共享当一个线程创建时:
?它可以和父线程使用同一个heap。
?父线程同时为新线程创建一个新的heap。
?新线程使用系统为它创建的heap。
这里,只有第一和第二中情况可以认为是heap的共享。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

活动对象—负责向异步服务提供器发出请求和处理这些请示的完成的类。它必须从CActive派生而来。
活动规划器—在事件处理程序中,负责为活动对象规划事件的类。类必须派生于CActiveScheduler。
应用程序信息文件(AIP,Application Information File)—包含应用程序标题、图标、功能和MIME优先级支持信息的文件。文件扩展名为.aif。
AIF生成器—用于生成应用程序信息文件及其图标的GUI程序。SDK程序运行在开发的机器上(不是运行在设备或模拟器上)。
应用程序编程接口(API,Application Programming Inte**ce)—系统对象或组件向其他对象或组件暴露的可见公共行为。
应用程序架构(Apparc,Application Architecture)—为Symbian OS应用程序及CONE提供了部分基本框架。
应用程序框架—处理应用程序的启动和对应用程序数据(它的文档)的访问。
应用程序启动器—Series 60设备的默认视图,以网格或列表视图模式显示可供选择的应用程序。
AppWizard—可以IDE集成的工具,用以快速生成GUI应用程序骨架。
ARM处理器—运行32位(或16位)嵌入式ARM RISC的处理器。
ARM4—用于基于ARM处理器的32位指令集和二进制接口。如果应用程序针对ARM4进行编译,它仅调用针对ARM4或ARMI编译的函数。ARM4代码运行速度比THUMB代码快,但却占用更多的ROM空间。
ARMI—用于基于ARM处理器的32位指令集和二进制接口,并带有Interwork模式。如果应用程序针对ARM进行编译,它调用针对ARM4、THUMB或ARMI编译的函数。ARM代码运行速度比THUMB代码快,但却占用更多的ROM空间。这是推荐使用的默认生成兼容性格式。
ASCII(美国信息交换标准码)—计算机使用的编码数字标准,用于表示所有大小写拉丁字母、数字、标点符号等等。有128个标准ASCII码,每个标准ASCII码可用一个7位二进制数来表示。
Avkon—Series 60标准UI库和应用程序框架(构建于Symbian Uikon技术之上)。
BC(二进制兼容)—如果程序动态链接到库的以前版本上,使用新版本库仍能继续运行,而不必重新编译,则该库为二进制兼容。
承载层—用于承担通话的电话网络。
黑箱子测试—在不知道被测试的组件的情况下所进行的测试。
Blit—从内存到图形设备进行像素数据拷贝的块传输。
蓝牙(BT)—在移动设备之间无线传输声音和数据的开放标准。
Bmconv—用于在Windows和Symbian OS格式之间转换位图的工具。
BMP(位图文件)—提供图像、图标和遮罩使用的像素模式,并提供填充显示区域的子图形和画刷。
布尔—只有真或假两种值的表达式或变量。
CA(证书授权机构)—发布用于创建数字签名和公钥对的数字证书的第三方受权威组织或公司。
证书生成器—用于创建证书请求文件,然后将该文件发送到证书授权机构。
密码组—用于安全套接字的数据加密机制。
清除栈—部分构建数据项的引用的栈,由CleanupStack:ushL()和CleanupStack:op()来维护。当它们异常退出时,将清除该栈。
客户—从另一个程序请求服务的程序。
剪切区域—将原始图像进行剪切的目标区域。
Codec(编解码器)—在不同数据格式之间相互转换的机制。
编码标准—Symbian或其他组织定义的标准,用于规定良好的编码习惯。
COM—串行通信端口,它支持RS-237通信标准。
CommDB(通信数据库)—提供系统范围的存储,用于通信相关的设置。
Comms模块(CSY)—串行通信模块。提供了串行端口与串行通信服务器连接的实现。
压缩商业卡—为Nokia 9000智能手机定义的旧式Nokia格式。
技术资格中心(Series 60)—诺基亚对有限数量的公司进行监察并授予Series 60软件工程高级资格的系统。
技术资格中心(Symbian)—Symbian对有限数量的公司进行监察并授予Symbian OS软件工程高级资格的系统。
复合控件—包含一个或多个简单或复合控件的控件。
CONE(控件环境)—为窗口服务器的异步服务提供活动对象接口,同时为控件和app UI提供框架。
控制台应用程序—不具有GUI界面的应用程序。
容器控件—复合控件。
上下文敏感菜单—根据应用程序的状态,当用户请求使用菜单时,为用户提供特定的菜单。
控件—屏幕的一个矩形区域,能响应用户的输入事件。
裁剪—输入图像时,去掉不需要的部分。
CSV(由逗号分隔的值)—一种文件格式,其中的每个不同数据项由逗号分隔。
CSY(串行通信模块)—串行通信模块。提供串行端口与串行通信服务器的实现。
数据报—用于断开式网络服务的信息包。使用数据包中的头部将它传输到目地地。
Daytime—用于决定远程计算机所在位置的时间的因特网协议,以人类可读的形式给出。
描述符—从TDesC派生的类,它描述用作字符串或某些二进制数据的内存区。
对话框—一个控件,通常由选择的菜单命令进行调用,它允许用户与程序之间进行交互。
拨号网络(DUN)—通过电话线,用调制解调器拨号连接到网络的方式。
直接屏幕访问(DSA)—不使用窗口服务器,直接在屏幕上进行绘制的方式,它避免了客户和服务器之间的通信,因此速度较快。
DLL(动态链接库)—为响应执行程序对API的显式调用而装载动态链接库。
DNL(动态导航链接)—使用视图架构的应用程序可以让其他应用程序发送消息,指定显示的视图、可能相关的伴随数据,这种消息称做动态导航链接消息。
DNS(域名服务器)—因特网名字和地址的数据库,它将名字转换成官方因特网协议数字或反之。
嵌入式文档—在另一个文档中保存的文档,因此在这两个文档之间产生关联。例如,在文本文档中保存图像。
双缓冲—在显示之前,通过在离屏缓冲中构建图像,达到平滑显示动画的技术。
DTMF(双音多频)—拨号时,电话系统用于与按键通信的方法。电话键盘上的按键产生两种模拟间,一种用于行,一种用于列。通过交换进行解码,从而判断按下的是哪个键。
ECom—便于使用插件模块的框架。
编辑器—有于数据项的UI控件。
EIKON—EIKON包含一个编程框架以及一个具体控件和标准控件集。在Symbian OS v6.0中,EIKON由UIKON和平台特定的UI库取而代之。
模拟器—在运行Microsoft Windows的 PC上实现Symbian平台。模拟器是Symbian平台的主要开发环境。
引擎—应用程序中的UI独立部分,它与数据操作及其他基本操作有关,这些操作均与最终向用户显示的方式无关。
EPOC—Symbian OS的原始名。它定义了特地为基于ROM的移动计算设备定义的操作系统。
ESOCK—Symbian OS套接字框架。它提供了一个抽象套接字接口,扩展后用于支持可编写的特殊套接协议,如TCP/IP。
ETeI—Symbian OS电话框架。它提供了抽象电话接口,扩展后用于支持可编写的特殊电话协议或设备。
事件—用于描述对事件源请求的完成过程的广义术语。
事件源—异步服务器提供器,当某事件发生时,它导致请求的完成(一般不会直接请求)。
异常—导致退出的程序条件。
外部化—将对象的数据写入流的过程。
工厂函数—返回自身类型指针的函数,是一种对象构建机制。
FFS(闪速文件系统)—一种持久性文件系统,它使用闪速RAM进行存储。一般为c:驱动器。
FEP(前端处理器)—允许输入字符(如T9)、手写识别或语音输入的框架。
FIFO(first-in, first-out)—一种缓冲的队列类型。
文件—永久存储器上的数据集合,可通过文件服务器进行访问。
文件服务器—负责所有文件系统操作的服务器线程。使用文件的所有应用程序都是该线程的客户端。
刷新—清空缓冲,将它的内容发送到下一个处理阶段。
折叠—为了进行粗略性或对大小不敏感的匹配,消除那些不重要的字符之间的差异。忽略大小写区别的同时,还忽略字符的重音。
窗体—表示相关数据项字段的UI组件。
框架—通过编写插件模块,可以扩展功能的组件(框架扩展)。扩展开发人员编写由该框架定义的接口派生而来的类。框架在运行时载入需要的扩展。
FTP(文件传输协议)—用于因特网上进行文件交换的协议。
GCC—GNU C++编译器。
GDI(图形设备接口)—与图形操作、图形上下文和位图相关的Symbian OS组件。
GET—用于获取特定文档的HTTP请求方法。
GIF(图形交换格式)—用于图像文件的常见格式。
GNU—致力于创建和支持开放源码软件的组织。
GPRS(通用无线分组业务)—一种GSM数据传输技术,它不为数据的传输和接收从便携终端建立连续信道,而是以包的形式传输和接收数据。
粒度—为数组增加容量的元素个数。
网格—提供行列布局功能的UI组件。
GSM(全球移动通信系统)—一种数字移动电话系统,它使用一种分时多重访问方式。在三种数字无线电话技术中(TDMA、GSM和CDMA)中,它的使用最为广泛。
GT(通用技术)—Symbian OS通用平台,用作UI平台(如Series 60)的基础。
GUI(图形用户界面)—窗口、对话框和其他用户用于交互的控件的系统。
HAL(硬件抽象层)—用于为硬件提供通用接口,并“隐藏”硬件特定的函数。
句柄—标识其他线程或进程所拥有对象的方式。
堆—用于动态内存分配的内存区域。
HTML(超文本标记语言)—用于创建因特网上所使用的超文本文档的编码语言。
HTTP(超文件传输协议)—因特网使用的对应协议。HTTP定义了格式化和传输消息的方式,还定义了响应不同命令时,Web服务器和浏览器应该采取什么样措施。
超级终端—可用于将主机与硬件设备进行连接的Windows程序,它使用主机上的串行通信设备以及通过空解调器电缆连接的硬件设备。
IAS(lrDA信息访问服务)—IrDA协议栈层,负责搜寻服务。
ICO—用于图标的图像格式。
IDE(集成开发环境)—支持软件编写过程的系统。此系统可能包含语法检查器、程序项的图形工具以及用于编译、运行和调试程序的集成支持(与源代码对应的相关编译错误)。
IMAP4(因特网信息访问协议,v.4)—远程访问服务器上的因特网邮件的开发标准。
IMEI(国际移动站设备标识)—手机序列号。输入*#060#可显示手机的IMEI号。
安装文件生成器—SDK提供的makesis.exe工具,用于创建安装文件。
接口(ECom)—定义插件DLL提供的服务的类。
内部化—从流中读取数据并将赋值给对象的过程,可能会从该数据构建新对象。
国际化—通过使用应用程序支持各种不同的语言而进入国际市场。
因特网访问点(IAP)—可用于访问因特网的一系列设置,如用户名、密码、ISP详细信息等。
因特网地址分配委员会(IANA,Internet Assigned Numbers Authority)—不同因特网协议参数(如端口、协议和企业号以及选项、代码和类型)的注册中心。
因特网控制消息协议(ICMP)—IP协议的一部分,用于处理错误和控制消息。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

文章接上!!

进程间通信(IPC)—跨线程和进程边界的通信。Symbian OS中的服务器使用IPC。
IP(因特网协议)—用于TCP/IP协议套件的网络层协议。
IP地址—给因特网上的每个设备分配的全球惟一编号,用于与指定的计算机进行连接。
IR(红外线)—低于可见光频率范围的电磁波(与辐射热相对应)。
IrCOMM—为以前的COM程序、打印和调制解调器设备提供COM(串行)端口模拟的协议。
IrDA(红外数据协会)—设置红外通信标准的团体。
IrLAN—支持局域网IR无线访问的IrDA协议。
IrLAP—提供点对点连接的IrDA协议。
IrLMP—IrDA协议,它支持通过单个点对点连接进行多重会话。
IrMUX—提供不可靠数据报服务的IrDA协议。
IrOBEX(红外对象交换)—用于交换vCard和vCal的协议。
IrTranP—可用于在数码照相机和Symbian OS手机之间传输图片的IrDA协议。
ISP(因特网服务提供商)—提供因特网访问的公司(通常为付费服务)。
Java—一种高级编程语言,由Sun Microsystems开发。
Java MIDP(移动信息设备架构)—专门用于手机的Java API集。
JPEG(联合图像专家组)—一种图形图像文件或图像压缩算法。
实时(JIT)—实时调试,即对正在终止的进程附加的调试器。
内核—操作系统的核心。它管理内存、进程和库的装载,并规划线程的执行。Symbian OS的内核名叫ekern.exe。
L2CAP(蓝牙逻辑链接控制和适配协议)—控制链接的多用户如何一起协作、如何处理包片断和程序集以及传递服务质量信息。
异常退出—Symbian OS的异常处理。异常退出时调用函数user: eave()。导致返回到当前的捕获装置,它等价于C++中的throw。
库—可供程序使用的预编译例程集合。
链表—存储的数据项集合。其中的每个元素或节点包含前一个或下一个列元素的指针。
列表—用于显示文本或图形化元素数组的UI组件。
本地文化—与已知语言和国家对应的信息集。
日志引擎—用于记录用户感兴趣的事件,其中一些事件,用户可能不能马上知道,或者可能会导致费用的增加,比如电话呼叫。通过查看程序可以读取这些事件并显示给用户。
机器UID—惟一设备标识码,在生产商的产品中,绝对具有惟一性。
宏—保存在可执行窗体中的指令集。
幻数—代码中的文字数数字,不带有解释或明显的意义。
Makefile—包含指定如何在不同环境中生成项目的必需信息的文件,由makmake工具从.mmp文件生成。
遮罩—定义另一幅位图的透明区域的位图。
MBM(多位图文件)—压缩位图的集合。用于Symbian OS中,作为一种在单个文件中存取大量位图的有效方式。
内存泄漏—当应用程序分配了使用的内存,但在结束时没有释放内存,此时将发生内存泄漏。
菜单—包含用户可执行的动作列表的UI控件。
消息传送—消息传送核心功能的框架,为新消息传送协议提供支持的框架。客户程序及协议提供程序均使用该API。
MIME(多用作因特网邮件扩展)—因特网邮件消息通过该协议可以包含若干独立的条目,包括二进制数据和应用程序特有的数据。
混合类—为与主要基类混合而设计的协议接口定义。在Symbian OS中惟一使用多重继承的基础。混合类只应当包含纯虚成员函数。这意味着,它们只描述对象的期望行为。
MMP—也称做项目文件。手工编辑的文件,主要目的是指定组成可发布的源文件。用作makmake工具的输入。
MMS(多媒体消息传送服务)—在手机之间发送多媒体消息内容的机制。
有模式对话框—一种对话框类型。用户可以与其他UI控件交互之前,必须关头有模式对话框。
无模式对话框—不带有模式的对话框类型。
MSDN(微软开发人员网络)—为使用微软产品和技术的程序开发人员提供帮助而设计的服务集(http://msdn.microsoft.com)。
MTM(消息类型模块)—消息传送架构的插件,它是一组组件,一起为特定的协议提供消息处理。
多字段数字编辑器(MFNE)—具有一个或多个字段的数字编辑器,每个字段用数据特定的字符分隔。可用于日期、时间项等。
多任务处理—同时执行多项任务的能力。从计算的角度看,这意味着,从一个程序切换到另一个程序由于相当快,以至于外表上看起来就像同时在执行多个程序一样。
多线程处理—一些操作系统必须同时执行程序的不同部分、不同线程的能力。
命名空间—将声明和定义按组放置在一起的作用域。
NIFHAN(网络接口管理器)—负责网络连接的Symbian OS组件。
通知(note)—用于向用户传达信息的一种UI控制。
OBEX(对象交换)—让vCard联系人信息和vCalendar日程项等对象使用IrDA (IrOBEX)或蓝牙进行交换的高层协议集。
OOD(磁盘空间不足)—当前文件空间耗尽时出现此条件。
OOM(内存不足)—RAM耗尽时出现此条件。
选项菜单—按选项软键时激活的菜单(“选项”是左软键的默认值)。
OS(操作系统)—计算机用于规划任务并控制系统资源使用的系统软件。
包交换数据(PSD)—基于包交换原理的数据通信网络。
严重错误—由终止当前执行线程的编程错误导致的运行时异常。
PCM(脉冲编码调制)—从模拟声音中取样并将结果保存为二进制数据的过程。
PDP(包数据协议)—PDP上下文指安全性、费用、服务质量和通话线路等信息集,它描述了移动无线服务通话和会话。
个人数字助理(PDA)—一种手持计算设备。
PIH(个人信息管理器)—通常包括地址簿、以有效方式组合注释、约会和姓名等信息的应用程序。
平台UID—惟一平台标识码。Series 60的每种发布版本均具有不同的平台ID。
插件—多态接口DLL,用于提升和扩展父程序的操作。
PNG(可移植网络图形)—作为GIE后续格式而设计的一种图形格式。
POP3(邮局协议,V.3)—从服务器读取因特网邮件的开放标准。
端口号—应用程序与传输服务之间的逻辑通信信道的标识符。每个程序或服务监听特定端口上到达的包,IANA将某些端口永久分配给特定的协议。例如,端口80一般用于HTTP通信。与主机设备建立连接时,端口号总是与IP地址结合使用。
POST—用于传输表单数据的HTTP请求方法。
PRT—协议模块。
PUT—将数据推入服务器的HTTP方法。
QA(质量保证)—保证商业产品满足某些最低标准的系统。
查询—用于向用户提出问题的UI组件。
RAM驱动器—非持久的临时文件系统,一般为d:驱动器。
RAS(远程访问服务)—允许远程用户登陆LAN的Windows功能。可以配置为让Series 60模拟器连接到网络。
资源文件—与可执行代码分离、包含数据的文件。它们的主要用途是定义用户界面组件以及保存本地化数据。
RFC 2616—HTTP 1.1规范。
RFCOMM—允许应用程序以相似的方式对待蓝牙的接口,让它就像在串行端口上通信一样。
RGB—红、绿和蓝。混合后显示屏幕上像素色的主要颜色。按不同成份组合这三种颜色可以得到发射光的每种颜色。
RISC(精简指令集计算机)—一种计算机处理技术,其中的微处理器理解若干简单的指令,因此提供了快速、可预测的指令流。
ROM(只读存储器)—用于保存计算机关闭时继续存在的程序和数据的存储器。它是持久性存储,可读出,但不能更改。一般为z:驱动器。
RS-232—使用电缆进行串行数据传输的标准,一般通过在数据和控制信号线上的5V和12V之间进行。
SA(系统代理)—动态管理某些变量的状态,这些的值反映了许多系统组件的当前状态。
SDK(软件开发包)—让软件开发人员创建运行于特殊平台上的产品的软件包。
选择键—该“键”用于确认选择。在Series 60设备上,这意味着导航控制器的中心位置。
信号量—用于在Symbian OS中同步协同操作线程的内核对象。通过RSemaphore句柄访问信号量。
串行通信—在单信道上逐个发送数据位的系统,它不是同步发送。
服务器—为另一个程序执行服务的程序。
服务搜寻数据库(SDD)—保存了手机可用蓝牙服务信息的数据库。
服务搜寻协议(SDP)—用于定位和描述蓝牙设备提供的服务。
会话—在客户和服务器之间通信的信道。
设置列表—一种Series 60 UI控件,用于向用户显示配置设置。
SIM(用户标识模块)—用于手机中的智能卡。它包含用户访问网络、接听电话的标识,也可以保存个人信息,如SMS消息和手机目录。
SIS文件—Symbian安装文件,由安装文件生成器(makesis. exe)生成,或由SIS文件创建器(Sisar)生成。文件扩展名为.sis。
Sisar—SIS文件创建器。
皮肤—GUI元素,可进行更换,让界面具有不同的外观。皮肤也称做“主题”。从Series 60 2.0开始支持皮肤。
SMIL(同步多媒体集成语言)—基于XML的语言,用于MMS消息的表示中。发音为“smile”。
SMS(短消息服务)—在手机间发送文本消息的机制。
SMTP(标准邮件传输协议)—发送因特网邮件的开放标准。
套接字—两个应用程序间通信端点的抽象(尤其是通过TCP或UDP进行通信时)。Symbian OS ESOCK组件提供了通用套接字接口。
软键—设备上的一个按键,它根据手机的操作更改功能。它的当前功能使用手机显示屏上按钮之上的关键字来突出。Series 60设备有一个左软键和一个右软键。一般左软键用于菜单和确认性响应,右软键用于退出视图和否认性响应。
小图形—一各任意形状的位图,应用程序不必重绘相应的屏幕就可以移动它。一般用于指针光标和用于游戏中的动画人物形象。
SSL(安全套接字层)—用于安全因特网通信的协议,它按加密的形式传输数据。
栈—用于实现数据结构的内存区域,它遵循后入先出的访问模式。系统栈用于保存本地程序变量、方法参数和返回值。
STL(标准模板库)—包含类、算法和迭代器的一个C++库。注意,这个库不是为Series 60而实现的。
存储—流的集合。
流—一个或多个对象的外部表示。
结构—任意类型元素集合的数据结构

   版权没有         盗版自由         任意传播        欢迎交流

TOP

文章接上!!


Symbian—Symbian是一家软件授权公司,由无线工业领导者所拥有。它为允许数据操作的手机提供了一种操作系统:Symbian OS。
Symbian OS—一种操作系统,Series 60平台的构建基础。Series 60 1.x基于Symbian OS 6.1,Series 60 2.x基于Symbian OS 7.0s。
SyncML(同步标记语言)—基于XML的标记语言,也是数据同步的开放标准。它允许在服务器和不同移动应用设备之间实现数据同步化。针对无线网络进行了优化。
系统监测—Series 60内的子系统,用于监视性能,它可能请求关闭应用程序。例如,OOM(内存不足)监测。
TCP(传输控制协议)—面向连接的协议,它构建于TCP/IP中的IP之上。它添加了可能的通信和流控制。
TCP/IP(传输控制协议/因特网协议)—用于在因特网上进行连接的通信协议套件。
Telnet—使用TCP/IP协议提供终端模拟的协议。它允许用户登陆和访问远程计算机。
主题—参见“皮肤”。
线程—在进程内的单个执行单元。线程并发运行。
THUMB—用于基于ARM处理器的16位指令集和二进制接口。如果程序对THUMB进行编译,则只其他针对THUMB或ARMI编译的函数。THUMB代码运行速度比ARM4代码速度快,但占用较少的ROM空间。
TIFF(标签图像文件格式)—图像文件格式。
TinyTP(小型传输协议)—一种IrDA传输协议,它给IrDA栈添加了每个信道流控制以及SAR(片断和程序集)。
TLS(线程本地存储)—可用于在DLL和线程上下文中锚定信息的内存机器字。代替使用(非常量)静态数据,因为Symbian OS DLL并不支持它。
TLS(传输层安全性)—用于安全因特网通信的协议,它以加密的形式传输数据。RFC-2246中定义了改进的SSL 3.0。
捕获—在捕获装置中执行C++语句集的宏。等价于C++异常处理中的catch语句。
捕获装置—与TRAP和TRAPD相关联的构造。在捕获装置内执行的代码可能异常退出,返回装置的清除部分,自动使数据项从清除栈中清理掉。
TSY—一种ETel扩展模块,它处理ETel服务器与特殊电话设备或设备家族之间的交互。
缇—1/1440英寸,或1/20点。GDI支持的所有度量或者对于设备采用像素为单位,或者对于真实的大小采用缇为单位。
UART(通用异步收发报机)—驱动RS-232串行端口的硬件的常用名。
UI(用户界面)—控件、编辑器和对话框层,用户通过它可以控制运行的程序。
UID(惟一标识符)—全球32位惟一性数字,用于复合标识符中,惟一性地标识对象、文件类型等。
UID类型—用于标识Symbian OS对象的3个UID集合,由TUidType对象封装。
UID1—复合标识符(UID类型)中的第一个UID。它标识Symbian OS对象的一般类型,可看作系统级别的标识符。可执行文件、DLL和文件存储都由UID1来识别。
UID2—复合标识符(UID类型)中的第二个UID。它在一般类型(由UID1定义)内进行识别,可看作接口的标识符。静态接口(共享库)DLL和多态接口(应用程序或插件框架)DLL由UID2来识别。
UID3—复合标识符(UID类型)中的第三个UID。它标识特定的子类型,可看作是项目标识符。已知程序的所有对象(包括库DLL、框架DLL和所有文档)可共享UID3。
Uikon—提供通用控件的Symbian UI层。根据Uikon构建平台特定的UI。
UML(通用建模语言)—用于面向对象设计的标准标记和建模技术。
Unicode—16位字符集,给各种语言中的字符分配惟一性的字符码。Series 60是一个Unicode平台。
URI(通用资源指示器)—指向因特网上对象的名字和地址通用集合。例如URL和部分URL。
URL(统一资源定位器)—因特网上资源的地址。
用户数据报协议(UDP)—TCP/IP协议套件中的无连接式、不可靠传输层协议。
UUID(通用惟一标识符)—惟一性的128位数字。UUID用于蓝牙设备地址。
vCalendar—用于创建、保存和共享电子日历或规划信息的开放因特网标准。由Versit联盟开发,现在由因特网邮件联盟控制。
vCards—用于创建、保存和共享电子商业卡片的开放因特网标准。由Versit联盟开发,现在由因特网邮件联盟控制。
视图—定义完备的用户数据表达方式。许多应用程序围绕许多基本数据视图而设计,它们组成了应用程序的GUI。
WAE(无线应用环境)—部分WAP标准。WAE指定了允许操作人员和服务提供商构建可到达各种不同平台的应用程序和服务的环境。
WAP(无线应用协议)—在手机上下载和显示浏览器内容的开放标准。
WBMP(无线位图)—用于WAP的单色图像格式。
WCDMA(宽带码多分址)—宽带无线访问的技术。允许进行高速的多媒体服务,如因特网访问和视频会议。
WDP—在容许不同数据的承载层服务之上,提供WAP通用数据报传输服务。
白箱测试—检查程序结构并根据程序逻辑得到测试数据的软件测试。
WIN32—在WINS生成中,用于链接的Windows 32位系统库。
窗口服务器—代表客户程序管理屏幕、键盘和指针的服务器。
WINS(Windows单进程)—模拟器生成,它运行在单进程环境中(有时,特定指Microsoft Visual C++ IDE生成)。
WINSB—用于Borland C++ Builder模拟器生成的WINS平台。
WINSCW—用于Metrowerks CodeWarrior模拟器生成的WINS平台。
WMF(Windows元文件)—常规Windows图形文件格式。
WSP(无线会话协议)—提供轻量级的WAP 客户/服务器事务,相对于基本数据报服务,具有改进的可靠性。
WTLS(无线传输层安全性)—提供隐私、数据完整性和WAP验证的层。
WTP(无线传输协议)—提供轻量级的WAP 客户/服务器事务,相对于基本数据报服务,具有改进的可靠性。
XML(可扩展标记语言)—专门用于Web文档的语言,允许创建自定义标签。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

〖开 发 参 考〗

本章将详细介绍两个Series 60项目中的所有组件,另外还将介绍使用其他关键开发工具工具来生成、部署和运行示例应用程序。
本章重点关注项目结构、文件和必需的生成工具。本章分为两个部分。第一部分是关于复杂项目定义和深入使用生成工具的指南。第二部分从“额外开发工具”一节开始,这一部分主要提供参考信息。读者可能希望略读这一部分,不过其中描述了更多开发工具、高级项目信息以及生成和应用程序开发问题(第4章将讨论应用程序设计、结构和源代码)。
第一部分的指南对于生成过程的更多高级特性提供了指导—应查阅第1章,温习基本过程和语法。该指南描述了3个示例项目中每个关键文件的内容,重点介绍.mmp和bld.inf文件的组成以及语法,我们已在第1章中介绍了这两个文件。
这一部分介绍的GUI应用程序演示了更复杂Series 60项目的细节和组成。同时介绍了该项目的两个变化版本。第二个版本显示如何创建本地化应用程序项目。
这一部分还介绍了一个控制台示例应用程序。一般情况下,将使用这个简单类型的可执行文件作为测试其他代码模块的基础—例如,测试应用程序引擎等组件。
本章将学习一些更常用的SDK工具,例如如下的一些工具:用于生成应用程序资源的工具、用于创建位图和图标的工具、甚至是用于创建基础Series 60应用程序中文件和代码的向导。
应用程序本地化—也就是说,设计并编码用于多个地区和语言的应用程序—对于最大化应用程序的市场范围至关重要。Symbian OS中针对这一点提供了非常优秀的支持,本章将从项目和生成的角度描述这一部分开发过程的关键元素。
本章也将更深入地介绍应用程序部署,同时说明如何得到更复杂的安装包,包括本地化应用程序的安装包。
本章也提供了有关SDK和模拟器配置信息的详细链接,包括测试和调试工具的概述、模拟器热键的相关信息以及如何使用支持红外线和蓝牙(Bluetooth)设备为模拟器添加通信功能的细节。
•        SDK版本和选择—关于安装并使用各种当前可用SDK版本的信息。介绍如何设置EPOCROOT的值和使用devices命令,同时介绍了正确建立系统路径的技巧。
•        HelloWorld GUI应用程序—详细描述了两个Symbian OS一般性项目文件。介绍如何生成并运行应用程序,同时描述产生的运行库文件。讨论项目文件夹和源文件的结构。介绍应用程序UI资源文件和资源编译器、应用程序信息文件、图标、标题。
•        通过HelloWorld示例的一个变化版本HelloWorldLoc演示应用程序本地化的涉及的内容。演示了示例应用程序的英语、法语和德语版本。
•        控制台应用程序—详细描述了两个一般性项目文件,同时描述了控制台项目文件和GUI项目文件之间的区别。介绍如何生成并运行该应用程序,还描述了可执行文件和源文件。
•        Symbian安装系统—介绍如何包装应用程序的所有组件,从而在真正的Series 60设备上安装该应用程序。在安装和本地化的应用程序安装期间运行可执行文件。
•        额外的开发工具—介绍Symbian OS位图文件和应用程序创建向导,同时介绍了开发人员可以使用的其他大量工具和实用程序。
•        许多Series 60 SDK和IDE的安装技巧—有关配置模拟器并使用它的许多工具的知识。
•        高级应用程序部署和生成指导—避免在不兼容设备上安装软件的Series 60 Platform UID。提醒读者注意一些Series 60平台的本质区别,同时介绍模拟器和目标硬件之间在哪些地方存在生成上的区别。
本章中提供了生成并运行3个示例项目必需的所有知识。可以在线获得与这些示例关联的所有项目文件、源文件和开发信息,在前言中已经说明了这一点。如果还没有获得这些资料,建议现在就下载并安装它们。学习本章时,它们是非常有帮助的参考知识。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.1  SDK版本和选择
如果在开发PC系统上安装了多个Symbian OS SDK,则在使用之前,需要选择希望使用的SDK。
Series 60 Platform SDK 1.x或更早的版本均基于Symbian OS 6.1。从Series 60 2.x版本以后,开始使用Symbian OS 7.0,并且修改了配置多个SDK的方法。
2.1.1  Series 60 1.x SDK
如果只使用Series 60平台1.x或更早的版本(基于Symbian OS 6.1),则选择一个SDK只涉及设置特殊环境变量EPOCROOT的值。在安装Series 60 SDK期间创建EPOCROOT,将这个变量设置为指向特定SDK的根目录。安装一些资料,例如文档和工具,这些资料对于多个SDK可能是公共的,因此将其放置在共享目录中。然而,每种平台模拟器的运行库环境以及相关的系统头文件和库都不相同。因此,每个SDK都有一个单独的目录树;环境变量EPOCROOT必须指向这个目录。例如,可以设置如下目录:

\Symbian\6.1\Series60\
SDK特有的工具、资源和示例项目都位于这个子目录树下面。因此,如果需要利用多个Series 60版本的SDK,可能需要确保在每次切换到特定SDK时都正确设置EPOCROOT的值。否则,将无法在没有获得错误消息的情况下使用特定的SDK。
通过在命令提示符中使用set命令改变EPOCROOT的值,可以在不同的SDK之间切换:

set EPOCROOT=\Symbian\6. l\Series60\
注意,EPOCROOT必须不包含(PC文件系统)驱动器字母—只需要指定文件夹路径即可。
作为另一种选择,可以使用EpocSwitch实用程序在不同的SDK环境(Series 60 1.1、1.2等等)之间切换。本章后面的“各种SDK工具”小节提供了有关EpocSwitch的更多信息。
此外,所选择的IDE可能具有直接设置EPOCROOT值的工具。
可以在以下两个目录中找到进行C++开发的Symbian OS工具(除了模拟器之外):
•        Symbian开发的工具位于\epoc32\tools\目录下面,该目录位于SDK安装的根目录中。
•        Symbian提供的ARM交叉编译器(cross compiler)是由Cygnus修改并提供的GNU gcc编译器。这种目标交叉编译器和它的支持程序位于/epoc32/gcc/bin/目录下,该目录位于SDK的根目录中,也可能位于\Shared\epoc32\gcc\bin\目录中,该目录位于SDK根目录的上一级目录中。具体位于哪个目录取决于安装SDK时选择的选项。
两个工具目录都应该包括在Windows系统路径中。SDK安装过程通常更新路径和注册表设置。

技巧:
如果正在使用Microsoft Visual C++,并且希望能够执行WINS的命令行生成,则必须确保建立环境变量以访问Visual C++工具。如果在安装Visual C++时选择了“命令行生成”选项,则通常会产生这种情况。也可以使用随产品一起提供的命令文件vcvars32.bat来设置。
2.1.2  Series 60 2.x SDK
在Symbian OS 7.0s中,修改了配置多个SDK的方法。因此,对于Series 60 2.x平台(安装或没有安装Version 1.x SDK),通过devices命令完成特定SDK的选择。不再需要设置环境变量EPOCROOT;相反,使用devices命令选择希望针对其进行开发的特定Symbian OS设备。以kitname:device这样的形式指定设备,其中,kitname指的是SDK。通过简单地打开命令提示符并且输入devices,可以看到所有可用设备的列表。为了将某个设备设置为默认设备,例如可以输入:

devices -setdefault @Series60_v20:com.nokia.series60
然后,通过改变默认设备或使用set EPOCDEVICE命令,可以切换到不同的设备。
注意,devices命令一般不会显示已经安装的任何SDK,除非这些SDK基于Symbian OS 7.0s或更高版本。然而,可以使用devices -add命令将这些SDK添加到列表中。可以在SDK文档中找到更多的相关细节。
注意,EnvironmentSwitch工具(Series 60 2.x中引入了该工具)可用于自动化切换到不同开发环境的过程。本章后面的“额外开发工具”一节将提供更多的相关细节。
通过Metrowerks CodeWarrior IDE使用设备
CodeWarrior IDE了解devices信息,并且会在适当的时候询问使用的设备包(例如,当使用“File”菜单中的“Import Project from .mmp File”选项时),本章的后面将描述这一点。注意,为了使CodeWarrior IDE可以检测到设备,标识符的设备名必须为com.name.name这样的形式。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.2  HelloWorld GUI应用程序
使用与第1章中完全相同的示例,详细介绍HelloWorld示例的两个一般性项目文件,并且逐行了解其内容。对于每个开发项目,必须有一个组件定义文件(bld.inf)和一个项目定义文件(.mmp)。项目的bld.inf文件可能引用一个或多个.mmp文件,每个.mmp文件对应一个将要生成的组件。在简单的项目中只有一个组件—例如,应用程序自身对.mmp文件的引用。在更复杂的项目中,除了应用程序,可能涉及其他组件,例如动态链接库(DLL),并且可能有多个.mmp文件。工具链使用组件定义文件和项目定义文件构造一个生成命令文件(abld.bat)。可以将这个文件用于各种目的,例如为选择的平台或开发环境创建其他的项目文件和工作区文件,或者以调试或发布格式为模拟器或目标设备生成项目。
2.2.1  HelloWorld bld.inf
HelloWorld组件描述文件(bld.inf)引用一个项目定义文件(HelloWorld.mmp)。

// HelloWorld bld.inf
PRJ_MMPFILES
// 列出项目所需的.mmp文件
HelloWorld. mmp
对于简单的应用程序(或单独的组件),例如HelloWorld示例,所有的内容一般都位于一个bld.inf文件中。项目中的.mmp文件列表位于PRJ_MMPFILES语句之后。在本示例中,只有一个.mmp文件,它的名称是应用程序的名称。在更复杂的项目中,可能存在其他一些.mmp文件的列表—每个文件分别对应于应用程序的每个组件部分。
bldmake工具处理当前目录中的组件定义文件(bld.inf),并且生成批处理文件abld.bat和一些批处理生成文件(.make)。ald使用makefile执行组件生成的各个阶段。输入如下命令查看bldmake语法的一般性列表:

bldmake
然后,输入下面代码,可以看到其他在bld.inf中有效的语句的语法一般列表:

Bldmake inf
2.2.2  HelloWorld.mmp
项目定义文件(.mmp)以平台无关和编译器无关的方法指定项目组件的属性。然后,SDK生成工具(abld.bat)或IDE使用项目定义文件和bld.inf文件得到平台特有的makefile。HelloWorld.mmp项目定义文件如下所示,后面的表2-1分别解释了每行语句。

// HelloWorld.mmp文件

TARGET  HelloWorld, app
TARGETTYPE  app
UID  0xl00039CE 0x101F6148
TARGETPATH\system\ apps\HelloWorld

LANG 01

SOURCEPATH  ..\src
SOURCE   HelloWorldApplication, cpp
SOURCE   HelloWorldAppUi, cpp
SOURCE   HelloWorldDocument, cpp
SOURCE   HelloWorldContainer. cpp

RESOURCE  ..\data\HelloWorld.rss
RESOURCE  ..\data\HelloWorld_caption.rss

USERINCLUDE  .  . . \inc

SYSTEMINCLUDE \epoc32 \include

LIBRARY euser.lib apparc.lib cone. lib eikcore.lib
LIBRARY eikcoctl.lib avkon.lib commonengine.lib
AIF HelloWorld.aif  ..\aif HelloWorldaif.rss c12
context_pane_icon.bmp context_pane_icon_mask.bmp list_icon.bmp
list_icon_mask, bmp

技巧:
欲查看.mmp文件中有效语句的完整列表,请打开一个命令提示符,定位到SDK,输入makmake-
mmp。

【此处插入表2-1】


1.UID
UID是全球唯一性标识符(globally unique identifier),它由32位数字组成。在Symbian OS中,通过UID类型标识对象,UID类型具有3个组件UID:UID1、UID2和UID3。UID1确定文件是文档还是可执行码。应该将它看作是一个系统级的标识符,用于区分可执行文件、DLL等文件。.mmp文件中的TARGETTYPE语句确定UID1。
对于文档文件,UID2确定文档类型(应用程序数据文件或.aif文件)。对于可执行代码文件,UID2的值确定可执行文件的类型(.app、.dll或.tsy)。对于可执行代码文件,在.mmp文件中的UID行上指定UID2和UID3。
UID3是一个应用程序级的标识符,应用程序的UID3值必须不同于其他所有应用程序。只有Symbian才可以发布这些值。通过发送电子邮件到
uid@symbiandevnet.com,可以从Symbian处获得应用程序的独特UID和其他用途的UID。在开发期间可以使用如下范围的UID:0x01000000到0x0FFFFFFF,但需要非常小心,绝对不要发布带有实验UID的应用程序。
Symbian OS使用UID将文档(数据文件)和.aif文件与它们各自的应用程序关联起来;UID3包括在每个数据文件、可执行文件或.aif文件的头部。然而,可执行文件和它们的组件仍然需要具有正确的文件扩展名,否则它们将无法正确运行,无法出现在Application Launcher(应用程序启动器)中,或者无法正确地与它们的文档进行关联。
当应用程序创建文档文件时,应用程序框架将所有的3个UID和32位的检查和(checksum)自动合并到文件头的前16个字节。

技巧:
有时,在生成项目时出现链接错误,这是因为.mmp文件中遗漏了一个必需的库。为了找出需要在.mmp文件中列出哪个库,可以检查SDK文档或使用clindex实用程序,该实用程序产生最新的有序清单—更多的细节可查看本章后面的“更多工具和实用程序”一节。
2.栈和堆的大小
自动变量(本地范围)、函数参数等存储在称为栈(stack)的内存区域中。可以从称为堆(heap)的池中获取动态分配的内存,通过new(或者是Symbian OS代码中的new(Eleave))等运算符进行自动分配。系统为每个执行的应用程序或线程创建栈和堆。运行库环境负责控制栈内存的分配和解除分配。开发人员直接控制堆上的内存分配和解除分配。在大多数情况下,开发人员可以控制这种分配;而在某些情况下,操作系统设计者负责控制这种分配。仔细地控制分配,并且特别注意堆内存的解除分配,这对所有Symbian OS开发人员是至关重要的要求。
默认情况下,应用程序的栈大小是8KB,但针对某些类型的应用程序,可能需要更大的栈。然而,必须注意不能为了方便而错误地使用栈。在Symbian OS代码中,只有较小的对象应该放在栈上;所有较大的对象一般都分配在堆上。如果确实需要多于8KB的栈(例如,在一个高度递归的应用程序中),可以在应用程序的.mmp文件中使用EPOCSTACKSIZE语句重写默认的8KB大小。以十进制格式或十六进制格式指定栈的大小(以字节为单位)。在目标硬件上,如果在ARM上发生栈溢出,这将造成页面错误;应用程序将产生出现严重错误并终止,同时报告一个错误(KERN-EXEC 3)。查看SDK文档了解完整的错误代码信息—搜索“Panic categories and numbers”以及“System panic reference”。
应用程序的默认堆大小是1MB。同样,可以根据需要增加(或减少)这个大小。通过EPOCHEAPSIZE语句可以指定最小和最大的堆值。在模拟器中,这并存在问题,因为没有强制实施最大的堆大小限制。
根据所使用的IDE,EPOCSTACKSIZE和EPOCHEAPSIZE语句可能在模拟器环境下不会产生任何效果。可能必须直接在IDE中改变项目设置,从而将更多的(或更少的)内存分配给应用程序。
警告:
在Microsoft Visual C++下面针对模拟器进行生成时,尝试使用过多的栈将产生下面的错误:

Engtest.obj : error LNK2001:  unresolved external
symbol _chkstk
\EPOC32\RELEASE\WINS\DEB/ENGTEST.exe :  fatal
error LNKll20: 1 unresolved externals
Error executing link.exe.

在Visual C++ IDE中,为了修正WINS生成的这种错误,从菜单中选择“Project | Setting”,然后在打开的对话框中选择“C++”选项卡。插入如下新行:

/Gs9999 /FD /c

其中,9999是以字节为单位的新栈大小(十进制)。
3.额外的项目组件
为了进行良好的面向对象设计并帮助实现可维护性和灵活性,Symbian OS应用程序一般划分为两个主要部分:UI和应用程序引擎—也称为模型(model)。UI一般又划分为数据在屏幕上的表示以及确定应用程序整体行为的处理器或控制器。应用程序引擎一般包含用于表示应用程序数据的数据结构、算法和数据持久性。
通常,将引擎创建为一个单独的组件—一般创建为一个DLL。如果将引擎创建为DLL,则将引擎DLL创建为一个额外的组件项目,该项目带有自己的.mmp文件。一般在bld.inf文件中将这个.mmp文件列为主应用程序的一个组件。然而,必须将引擎DLL的名称包括在应用程序的.mmp文件的LIBRARY语句中。
第4章中将更详细地讨论Symbian OS UI应用程序中的应用程序架构和关键的类;在第4章中将提供一个示例项目,显示如何创建一个封装引擎功能的DLL。
2.2.3  生成和运行
打开一个Windows命令提示符,定位到包含项目定义(.mmp)和组件定义(bld.inf)文件的文件夹—例如,SDK根目录中的\EMCCSoft\HelloWorld\group。
输入如下命令创建abld.inf:

bldmake bldfiles
输入如下命令,从命令行中编译和链接项目:

abld build wins udeb                                —对于Visual C++
abld build winsb udeb                                —对于CodeWarrior
abld build winscw udeb                        —对于for Borland C++
这将用Series 60调试模拟器生成项目。通常在IDE中生成和运行HelloWorld示例应用程序之类的程序。

技巧:
一些IDE中的生成过程可能不会生成完整应用程序所需的所有资源—例如位图(.mbm)和图标(.aif)文件。使用abld的命令行生成将进行完整的生成,包括创建所有在项目中指定的资源和组件。输入abld可以查看该命令文件的一般性语法,或者输入abld help commands列出所有的命令选项。
为了运行应用程序,首先需要启动Series 60模拟器。在命令提示符中输入:

epoc
一般情况下,这就可以从命令提示符中启动模拟器。如果已经安装了多个SDK,可能需要确保选择正确的版本—例如,通过使用devices命令来完成。通常,可以创建IDE项目文件,并且在选择的IDE中生成和运行模拟器,第1章中已经对此进行了描述。对于应用程序调试,在IDE中以调试模式运行应用程序是一个必要条件,而不是一个可选项。
一旦已经启动Series 60调试模拟器,定位并选择HelloWorld应用程序,然后点击“Selection”按钮(位于定位控件的中间),用以调用该应用程序。应用程序将运行,并且应该如图2-1所示。
2.2.4  HelloWorld GUI的可执行文件和运行库文件
这一小节介绍生成过程产生的文件,显示每个文件的类型和作用,以及它在模拟器和目标设备上的位置。图2-2总结了根据输入源、头文件和输出运行库文件的整个生成过程。
至少需要两个文件才可以组成最小的GUI应用程序,分别是.app文件和.rsc文件(例如,HelloWorld.app和HelloWorld.rsc)。HelloWorld.app是应用程序的可执行文件,换句话说,这是来自于编译和链接过程的输出。HelloWorld.rsc是资源编译器产生的二进制资源文件。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

【此处插入图2-2】

在一个计划将要发布的应用程序中,也必须提供应用程序信息文件(.aif)—在开发期间并不一定要提供该文件。.aif文件包含图标、所支持语言的可选标题,并且指定某些应用程序属性,例如是否支持嵌入。如果没有提供.aif文件,应用程序仍然可以运行。然而,它将具有由系统提供的默认图标,并且系统将其他的应用程序特征设置为默认值。如果指定标题资源文件(例如,HelloWorld_caption.rss),将会产生用于安装的额外文件HelloWorld_caption.rsc。请参见本章后面“AIF文件”小节中的“标题”部分。
在Symbian OS中,GUI应用程序是特殊形式的DLL,它总是具有.app文件扩展名。系统提供一个特殊的框架,用于加载和正确地初始化GUI应用程序。作为一个开发人员,必须依照这个框架的要求,并且必须提供许多纯虚函数的实现,这样应用程序才可以正确启动。作为选择,也可以提供许多其他虚框架函数的实现,从而获得可能需要的额外特殊行为。第4章将详细讨论应用程序框架以及虚函数和纯虚函数。

为了使系统可以自动识别,所有的GUI应用程序必须遵循一个位置约定—它们必须位于特定的文件夹中,例如:\system\apps\appname\。因此,在HelloWorld示例中,应该将前面描述的文件(HelloWorld.app、HelloWorld.rsc、HelloWorld_caption.rsc和HelloWorld.aif)放到名叫\system\apps\HelloWorld\的文件夹中。这个文件夹必须位于c:或z:(模拟的ROM驱动器)等目标设备驱动器或模拟驱动器的根目录中。

警告:
将应用程序的名称保持在16个字符或更少的字符(大小写并不重要),否则Series 60模拟器可能无法找到应用程序,即使生成过程没有报告任何错误也是如此。
为了正确地实现特定应用程序的功能,可能必须使用其他许多文件。例如,可能需要压缩的多重位图文件(.mbm)、应用程序特有的数据文件等。通常将这些必要的文件放在和关键的应用程序文件相同的位置中,即\system\apps\appname。

技巧:
有时,当尝试在目标设备上或模拟器下运行应用程序时,可能会获得一个令人恼怒的“Not found(没有找到)”错误消息—遗漏了某些内容或者某些方面不正确,但是系统不会提供更多的提示。检查应用程序UID是否正确—可能忘记在代码中(包括.mmp文件和.pkg文件)更新所有的UID。同样,可能遗漏了一个DLL文件—当安装到目标设备并且忘记将所有的DLL移动到该设备时,这一点更为常见。另一个更常见的问题是遗漏了另一个文件,例如.mbm文件、资源文件或另一个必需的应用程序数据文件。



2.2.5  HelloWorld项目文件和位置
在\EMCCSoft\HelloWorld\下面,将找到大量的相关文件夹,表2-2列出了这些文件夹
项目的子文件夹和文件组织(位于项目名文件夹下)将反映定义在.mmp文件中的结构。在一些情况下,data和install文件夹可能不存在,相关的文件可能位于group文件夹中。实际上,在生成期间生成的所有文件和中间生成文件都位于这种文件夹结构的外部,除了以下文件外:
•        abld.bat文件—该文件不可以在不同的SDK之间移植,当bld.inf文件和.mpp文件改变时,必须重新生成该文件。
•        在生成过程中,HelloWorld.sis位于包含.pkg文件的文件夹中
【此处插入表2-2】


2.2.6  HelloWorld GUI源文件
这一小节将概述组成示例项目的每个源文件的内容和功能,第4章中将详细讨论Series 60应用程序设计原理。
1.源文件和头文件
列在表2-3中的文件组成了C++应用程序源文件、头文件和类模块的主体
一旦在IDE中打开HelloWorld项目,可能会发现另一个源文件HelloWorld.uid.cpp。这是UID源文件;生成工具自动在某个文件夹下创建这个源文件,例如在SDK根目录中的\epoc32\Build\Symbian\6.1\Series60\HelloWorld\group\HelloWorld\wins\中创建此文件。不需要编辑该文件。它只是将应用程序的UID定义为一个数据段,一些在模拟器(WINS)环境下运行的DLL需要它。

【此处插入表2-3】

2.应用程序资源文件
在Symbian OS中,应用程序使用资源源脚本文件(Resource Source Script)(.rss)(例如,HelloWorld.rss)定义GUI应用程序在屏幕上的显示方式。定义应用程序外观、行为和功能的许多信息存储在资源文件中。在资源文件中可以定义从状态面板、菜单、普通用户界面控件到单个对话框等各个方面,这些都在可执行文件的主体外部创建。在运行时可以根据需要有效地加载单个资源,从而最小化内存需求。
在生成时,将应用程序资源编译(并且可能会压缩)到将在运行时使用的二进制文件中(默认情况是带有.rsc扩展名的文件)。在生成过程中,资源编译器处理这个文件。一般在编译源文件之前自动编译该文件(但只有在上次运行资源编译器后已经更新资源文件的情况下才进行编译)。资源编译器的输出是一个二进制文件,在运行时使用该文件提供必需的资源信息。默认的输出名具有和应用程序相同的名称,但是带有.rsc文件扩展名。
对于HelloWorld示例应用程序,资源文件的文件名将是HelloWorld.rsc。此外,资源编译阶段还生成带有.rsg文件扩展名的头文件。该文件包含一系列符号名/数字常量对(通过#define定义),用于标识每个用户界面元素。只要引用或使用相关的资源,则必须将该文件通过#include包含在.cpp文件中。
资源文件和它们的内部结构可能一开始表现得非常复杂,但通过逐步深入了解,它们将变得非常直观。本书中将提供应用程序资源文件的全面解释和示例,并且可以在Series 60 SDK示例项目中找到其他许多示例。
可以创建另一个可选的资源文件HelloWorld_caption.rss,用于定义应用程序的标题,即显示在Application Launcher中的应用程序名。提供两个标题的大小,以容纳Application Launcher网格视图和列表视图的显示选项。资源编译器也在完整的项目生成期间处理这个文件。
3.其他头文件
注意,avkon.hrh(位于\epoc32\include\中)包含许多由Series 60用户界面和应用程序框架定义的枚举常量。对于Series 60应用程序来说,这是一个非常重要的文件。例如,其中一个定义的常量是EAknCmdExit;应用程序的菜单选项“Exit”应该总是生成该命令。当应用程序应该关闭时(例如,具有较低的可用内存或者需要进行系统备份时),由框架传递的标准值是EEikCmdExit,在Uikon.hrh文件中定义了这一点。
名字为HelloWorld.hrh的特殊头文件是大多数项目的一部分,它包含可以用于源文件(.cpp)和资源文件(.rss)中的任意枚举常量定义。这些常量特定于某个应用程序,并且一般用于菜单命令、键的处理、视图标识符或对话框中的命令处理。
在带有.rh扩展名的文件中定义UI资源和控件的结构,该结构用于应用程序的资源文件中。可以针对自定义用户界面组件而定义自己的资源结构。特殊的SDK提供了大量的资源结构,定义这些结构的.rh文件位于..\epoc32\include文件夹中,该文件夹在的SDK文件夹树的下面。第5章中将更为详细地介绍资源文件和资源头(.rh)文件。

2.2.7  资源编译器
实际上,可以在资源文件中定义所有的用户界面元素和控件。在运行时可以根据需要从已编译的资源文件(默认情况是带有.rsc扩展名的文件)中加载单个资源,从而最小化内存需求。
可以在不重新编译主程序的情况下本地化资源文件。为了使本地化更为简单,通常将所有的用户界面文本从主资源文件(.rsc)分离到单独的头文件中,并且在生成时有条件地将这些文本通过#include包括到主资源文件中。这是包含的语言文本文件,而不是在后面转换成不同支持语言的主资源文件。针对每种语言产生应用程序资源文件的一种版本。这一节的后面将更详细地讨论本地化。
应用程序标题资源可以用于以两种不同的长度和多种语言提供标题(应用程序的名称)。在Application Launcher中,标题和应用程序的图标一起显示。在完整的生成过程中,资源编译器也处理标题资源文件。查看本章后面的“AIF文件”小节可了解更多细节。
通常在IDE中自动调用资源编译器(rcomp.exe)。作为选择,也可以从命令提示符中运行它;一般通过一个命令文件(epocrc.bat)执行资源编译器,该命令文件通过C++预处理器传递资源文件,然后使用rcomp.exe编译该文件。编译资源文件可产生一个二进制输出文件和一个.rsg头文件,通过#include将这个头文件包含到C++代码中,从而标识特殊的用户界面资源,如文本串、对话框和菜单组件。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.2.8  应用程序和资源的本地化
如果需要将应用程序发布到本地区之外,则应该从项目的开始就考虑本地化需求。Symbian OS及SDK生成系统和工具中提供了关于本地化的很好支持。
对于拉丁字符集,使用不同的语言文本改编应用程序应该只需要改变资源文件,因为用户可视文本不会嵌入到C++源文件中。然而,对布局必须采取灵活的态度,因为转换成不同语言的文本明显具有不同的长度。
每种支持的语言都具有两位数字的标识符代码。例如英语是01,法语是02,而德语则是03。在\epoc32\Include\e32std.h中定义这些语言码。对于每种语言,一般通过转换默认的语言文本来创建特定的文本文件。然后,在生成时有条件地将这些语言文本包含在主应用程序资源文件中。本章中使用的HelloWorld示例版本(称为HelloWorldLoc)演示了通过这种方法本地化应用程序的过程。每个特定的文本文件一般具有两位数字的语言码,这种语言码组成了文件扩展名的最后两个字符。因此,在这个示例项目的HelloWorldLoc版本中,将看到包含的文本文件具有3种变体,扩展名为.l01、.l02、.l03,分别表示英语、法语和德语版本。
针对其他地区敏感的信息和格式,也具有大量的支持类。例如,在e32std.h中定义了TLocale和相关的类,并且允许根据当前的系统地区正确格式化日期、时间、货币和其他许多地区敏感的数据类型。需要了解各种对地区敏感的数据类型以及可用的格式化类,并且确保在屏幕上显示数据时使用它们。
可以使用许多方法来提供语言变体和安装文件,这些都在应用程序安装时为用户提供了各种选择。
针对特定语言编译的资源文件一般都具有.r01、.r02和.r03等文件扩展名,并且用户在安装时可以选择语言。默认编译的资源文件具有.rsc扩展名;在安装期间可以将任何语言变体重新命名为这个扩展名。Series 60项目文件(.mmp)可以通过LANG语句列出支持的语言。

LANG 01 02 03
执行完整的项目生成时,系统将编译应用程序的英语(01)、法语(02)和德语(03)资源。本章后面将提供关于安装多语言版本应用程序的更多信息,而在第4章中将介绍日期本地化。
对于非拉丁语言,文本的本地化更为复杂。对于使用汉语、日语、朝鲜语、希伯来语、阿拉伯语和泰语等语言生产设备,Symbian OS和Series 60确实提供了一些支持。然而,编写支持这些语言的应用程序是一个专门的主题,超出了本书的讨论范围。
2.2.9  AIF文件
在运行时使用应用程序信息文件(.aif),并且存储关于应用程序的数据,包括:
•        两种大小的图标(本章后面将定义),系统使用这些图标代表应用程序。
•        各种功能,例如文档嵌入、新文件的创建、是否隐藏应用程序以及MIME类型的支持优先级。
•        可选地使用支持语言的应用程序标题(名称)—虽然可以通过本节后面介绍的标题资源文件系统提供对标题的更好支持。
如果没有.aif文件,应用程序将使用默认的图标、以应用程序名称作为标题(省略文件扩展名)。通过和Series 60 SDK一起提供的aifbuilder工具,可以独立于应用程序创建.aif文件。aifbuilder工具允许定义.aif文件的属性,并且将项目定义的细节保存在文件扩展名为.aifb的文件中。注意,aifbuilder需要安装JavaTM 2运行库,可以从http://java.sun.com中获得该运行库。
可以通过带有.rss文件扩展名的资源文件(例如HelloWorldaif.rss)手工指定.aif文件的组成部分。本章描述的所有示例GUI应用程序中都使用了这个选项。Aiftool实用程序负责编译这个资源文件—可以在命令提示符中手工执行这个实用程序,或者在完整的项目生成过程中自动执行。.aif生成过程也转换形成图标的位图文件(使用bmconv,本章后面将介绍),然后创建.aif文件。Series 60 SDK中文档中说明了aiftool实用程序和.aif文件的语法。
1.图标
当嵌入并显示在应用程序外壳上时,图标用于代表应用程序和它们的相关文件/文档。通常以两种大小提供Series 60图标。如果特定大小的图标不可用,则显示最适合当前容器“缩放状态”的大小—例如,Application Launcher网格视图和列表视图使用4229像素的图标,然而状态面板的上下文面板(当应用程序具有焦点时显示在屏幕的顶部)使用4444像素的图标。如图2-3所示,在应用程序视图中,Messages图标的大小是4229像素,而状态面板中屏幕顶部的Messages图标大小是4444像素。
提供不同的图标大小有助于确保系统可以使用最适合的大小。只提供一种大小,当以特定大小进行绘制时产生动态缩放—缩放较小的位图一般将产生显著的图像质量丢失。
Aifbuilder可以启动一个图标设计工具,该工具将创建组成图标的位图和遮罩。AIF图标设计器有助于以Symbian OS特有位图文件格式产生这种图标,这种位图文件格式称为多重位图文件格式(.mbm)。
2.AIF文件本地化
如果应用程序需要根据不同的语言而提供不同的图标,可以通过如下的方法实现这一点:使用aiftool实用程序产生.aif文件的多个副本,每个副本包含适当的位图。通常使用扩展名.aXX保存产生的每个本地化.aif文件,其中XX是与适当地区关联的两位数字语言码。应用程序框架软件(Apparc)已得到修改,以尝试加载和当然系统语言设置关联的.aif文件。
3.MIME支持
系统通过前面描述的UID系统识别本地Symbian OS文件(由Symbian允许的应用程序创建),特别是通过UID3进行识别。对于非本地文件,MIME类型识别是一种理想的可选方法。多用途因特网邮件扩展协议(MIME,Multipurpose Internet Mail Extension)定义了用于传输非文本数据的文件格式,这些非文本数据包括在因特网上传输的图形、音频和传真等。查看http://www.iana.org/
assignments/media-type/了解关于MIME类型的更多细节。
Symbian OS应用程序可以在它的.aif文件中指定支持的MIME类型以及对每种类型提供支持的优先级。例如,可能希望自己的应用程序支持纯文本文件的显示和编辑。打开某个文件时,Symbian OS启动对所选文件类型具有最高优先级支持的应用程序。
存在4种优先级(由\epoc32\include\aiftool.rh中的枚举定义),一般只应该使用其中的EDataTypePriorityNormal或EDataTypePriorityLow两种优先级。
例如,文本编辑器很明显适合于编辑文本/普通文件,因此应该对这种文件类型提供EDataTypePriorityNormal优先级。Web浏览器不太适合于处理文本文件,因此对这种文件类型提供较低的EDataTypePriorityLow优先级。因此,可以启动这两种应用程序处理文本文档。然而,如果同时存在这两种应用程序,则优先启动文本编辑器。假设两个应用程序具有相同的MIME类型优先级,Symbian OS将任意启动其中一个应用程序。
如果需要了解.aif文件和MIME类型支持的更多信息,可以查看相关的Series 60 SDK文档。
4.标题
Series 60 UI和应用程序框架Avkon提供了将标题和应用程序关联的可选功能—相比于一般通过.aif文件提供标题的功能,应该优先使用这种功能。默认情况下,系统将使用.aif文件中提供的标题。然而,很可能应用程序作者已经创建了一个单独的标题文件,同时包含普通长度的标题和简短标题—提供的这些标题用于Application Launcher的列表视图或网格视图中。简短标题用于应用程序网格视图中,而普通标题则用于应用程序列表视图中。使用创建普通GUI资源文件的相同方法得到标题文件。对于HelloWorld项目,标题源文件是HelloWorld_caption.rss,在运行时使用的二进制输出文件为HelloWorld_caption.rsc。该文件和其他应用程序文件(例如.app、.rsc和.aif等)一起放置在\system\apps\HelloWorld\文件夹中。
如果需要,可以为应用程序支持的每种语言产生单独的标题文件。命名标题资源文件的约定如下:
NAME_OF_APP_caption.rss,其中NAME_OF_APP是应用程序的名称,在HelloWorld示例中就是HelloWorld_caption.rss。通过将额外的行添加到应用程序的.mmp文件,可以将标题资源的生成作为普通生成过程的一部分:

RESOURCE < NAME OF APP >_caption.rss
然后,编译过的资源文件形如:
\system\apps\appname\appname_caption.rXX,其中XX是在.mmp文件中指定的两位数字语言码

1.jpg (157.99 KB)
2007-11-23 23:31


2.jpg (49.08 KB)
2007-11-23 23:31


3.jpg (54.09 KB)
2007-11-23 23:31


4.jpg (51.76 KB)
2007-11-23 23:31

   版权没有         盗版自由         任意传播        欢迎交流

TOP

发新话题