2 我需要Symbian工具包吗?
如果你是一个长周期应用的开发者,企业合作伙伴或者网络操作员,你将几乎肯定需要BAK。
如果你正在把软件移植到手持设备项目上来,或者你正在从事的领域需要对Symbian操作系统有深入的接触,或者你只是简单地想通过加强对源代码的访问和获得更多的调试信息来加快开发进程,你几乎肯定需要来自DevKit附加的源代码。
注意,在本文提到DevKit的地方,假设我们仅仅指的是DevKit而不是BAK。而在提到BAK的地方时,会说BAK合适做这个开发工作,尽管BAK或者DevKit或许都会被用到。当提到这两个工具包的时候,文档中会用“Symbian工具包”这样的字眼。
接下来的一节将讨论在如上图所示的Symbian操作系统模型中各层的基础上进行开发需要BAK还是DevKit。关于Symbian操作系统工具包和子控件的对比的细节将在第三节中给出。
2.1 应用程序开发
设计完美的GUI应用至少包含了一个建构在特定的系统UI(UIQ,Nokia S60等)之上的UI组件和一个能够与PIM引擎、系统库、中间件提供的服务(像多媒体)打交道的引擎组件。他们或许也包含了一个文件类型识别器,用来识别应用程序可以处理的文件。
Symbian工具包(DevKit和BAK)不能用来完整的开发一个用于商业产品的UI,他们绑定了一个名叫Techview的内部Symbian UI。为了开发一个设备的UI,你需要一个授权者SDK或者授权者DevKit。
DevKit对开发自定义控件可能有用,但是DevKit并不是必须的;通常,源代码对于调试非常有用。
Symbian工具包能被用于应用程序引擎的开发。他们是非常的有用和重要的,因为他们决定了你需要访问的API,以及你需要在手机开发周期中的哪一个点交付产品。
Ø 如果你正在使用合作伙伴的API(例如电话通信),你需要DevKit或者BAK才能访问到这些API。如果你正在使用公开的API,像访问PIM,这些在授权者的SDK中就可以得到,然而DevKit支持更加深入的调试。
Ø 如果你正在为一个运行在手机ROM上的应用版本的发布而努力,可能会需要DevKit来保持与最新更改的同步,甚至包括那些在公开的SDK中的API。
Symbian工具包对于识别器的开发是不必要的;在公开的SDK中就包含了头文件。然后在一个硬件参考模型上运行新的识别器通常是一个非常明智的事情,因为书写的非常差的识别器能够让手机启动的时候死机。
为了评估是否需要一个Symbian的工具包,你需要考虑软件交付的时间和所需要的API。在后面“子组件”一节中将会对什么样的组件需要DevKit进行深入讨论。
2.2 系统UI
类似于S60或者UIQ,一个全部的系统UI的创建需要DevKit。
系统UI下面所述的部分能够单独用SDK或者BAK进行开发,尽管使用DevKit能够使调试更加简单:
Ø 自定义控件-DevKit中的CONE/BAFL源代码对调试非常有用。
Ø 写一个前端处理器(FEP)-注意,在一些系统UI中,有一些UI家族对普通FEP框架进行了特定的扩展。
2.3 中间件开发
不需要Symbian开发包去访问由Symbian中间件和系统库提供的服务,但是你必须要用DevKit或者BAK来变成这些服务的提供者。例如:你不需要一个DevKit去播放一个音频文件,但是你必须要用DevKit或者BAK写一个多媒体框架插件以支持新的音频文件类型。
强烈推荐DevKit(而不是BAK)用于中间件的开发,因为DevKit包含了相关的源代码和例子,可以从这些源代码和例子入手以开发自己的插件,同时框架源代码可以用于调试。没有源代码的开发可能是超乎想象的困难(prohibitively difficult)。
必须使用Symbian工具包进行开发的Symbian操作系统框架包括:多媒体,电话通信服务期,通信服务期,开放字库系统,IP Hook。
2.4 Base Porting
对于所有的base porting(不知道怎么翻译)和设备驱动编,DevKit都是必须的。BAK不合适。
3 对于子组件,我需要DevKit吗?
下面一节描述了在子组件中什么类型的开发需要Symbian开发工具包,什么类型的又不需要。谈及的子组件包括:
Ø 连接(Connectivity)
Ø 消息(Messaging)
Ø 多媒体
Ø 安全
Ø 电话通信
Ø 通信服务器
Ø 窄带协议
Ø 网络和通信架构
Ø 基础和设备的驱动开发
3.1 连接(Connectivity)
对于能够直接嵌入手机制造商“PC Connect”解决方案中的组件的开发,DevKit是支持的。如果你正在和一个CustKit的授权者一起开发一个连接方案,你可能需要访问DevKit。
连接解决方案由PC和Symbian设备端组件组成。Symbian端的头文件可以在Symbian开发包和授权者的SDK(在SDK中,授权者要支持Symbian连接解决方案)中得到。PC组件只能在DevKit中得到,也可以在符合条款“允许潜入到CustKit授权者的产品中”的情况下进行授权。对于单独的连接软件的开发,他们不被授权。
“Programming PC Connectivity Applicatons for Symbian OS”一书是当前关于Symbian操作系统连接开发的最权威的指南。
3.1.1 连接FAQ
1、我在哪里能够得到对于Symbian端连接开发的所需文件?
这些在DevKit,BAK或者在授权者SDK中都可以得到(如果SDK支持Symbian解决方案)。
2、我在哪里能够得到对于PC端连接开发的所需文件?
这些只能在DevKit中得到。在授权者SDK或者BAK中都无法得到。注意:授权条款只允许嵌入到CustKit授权者的产品中。
3、拥有DevKit能给我那些允许我做更多的开发或者是我当前的开发效率更高的附加源代码吗?
DevKit提供了大部分的核心引擎源代码,因此它会对用于连接解决方案开发的普通Symbian操作系统源代码的调试很有帮助。例如:通信录,议程或者其他的数据库引擎。注意:在连接期的上下文中不能进行调试;调试一个PC连接通常会导致连接断开。
4、我怎么写一个独立的连接应用?
Symbian不支持独立连接应用的开发。
5、我怎么得到一个授权者或者Symbian的“连接”SDK?
Symbian不提供“连接”SDK;this is the purpose of the DevKit。
联系授权者,从他们那里直接获得关于他们的连接解决方案的信息。
3.2 消息
Symbian的消息功能通过使用“消息类型模块(MTM)”支持多种不同的消息协议。在写消息的时候,Symbian提供MTM以支持电子邮件(POP3,IMAP4和SMTP),传真(在OS v8中被去掉),短信息服务,个人简历信息(Bio),多媒体信息服务(在OS v9种被去掉),OBEX和EMS。
应用程序可以通过消息类型的客户端MTM来操作消息类型。(省略)
3.4 安全
为了在安全的子组件中使用很多API,Symbian开发包是必须的。
需要DevKit的API有:
Ø 密码算法
提供对原始加密算法的访问。注意:DevKit是访问这些API的唯一方法。参看“FAQ944:Dose Symbian OS support cryptography and related functionality?”
需要DevKit或者BAK的API有:
Ø 密码令牌框架(Cryptographic tokens framework)
支持密码令牌的框架,例如硬件设备,它们采用一定的方法实现加密功能,这个方法中密文不能离开令牌。当前这个框架通过在ROM中的插件为Symbian操作系统的统一证书库和密钥库验证提供了底层支持,在将来或许会作为支持硬件加速加密算法框架来使用。参看Symbian开发者库:.〉〉Developer Library〉〉API Reference 〉〉C++ API reference 〉〉Token Framework
Ø 内容访问框架(CAF)
为Symbian操作系统提供数字权限管理(DRM)支持。需要Symbian开发包来写DRM代理插件嵌入到CustKit授权者ROM中,并且直接把内容提供给DRM或者让内容使用DRM(and to directly make content consuming and supplying applications DRM-aware)。这样的应用程序需要Symbian签名。注意:通过DRM插件(例如通过多媒体客户端的API)访问DRM内容的应用程序不需要直接访问CAF框架。参看“DRM on Symbian OS”白皮书。
Ø 软件安装程序/SIS文件安装程序
为设备上的软件安装程序提供引擎。注意:sis文件安装程序不被后来的Symbian OS v8重视,被软件安装程序所替换。
Ø 密钥库
为所有由密钥库令牌提供的密钥提供一个通用的访问点。客户端能够生成、导入和导出密钥对,列出密钥,保护密钥,鉴别用户和进行私钥操作(如果鉴别通过)
DevKit或者BAK不需要访问:
Ø 证书管理
存储和获取证书,为证书设置信任状态,构造和验证证书链,并且检验证书的信任。参看Symbian开发者库:» Developer Library » Symbian OS Guide » Security guide » Certificate Management
Ø 公共的信息摘要算法
访问公共的哈希算法的API,包括MD2,MD5,SHA1,HMAC(参看hash.h)
Ø 随机数服务器(参看random.h)
生成比伪随机数生成器具有更好的熵的随机数的API。
Ø ZLib ZIP压缩/解压缩,注意:这个组件在Symbian OS v8.0中已经从安全中移到了系统库的子组件中。
3.4.1 我需要DevKit来进行安全开发吗?
参看上面。(省略)
3.6 通信服务器(C32)
通信服务器(C32)为与支持串行接口设备进行通信提供了客户端的API,例如:UART,USB,BT等。访问C32客户端API不需要DevKit。
C32使用“port”的概念作为串行通信的通道。客户端API能够打开port,共享port和传输数据。服务器为特殊类型的串行设备提供支持同步多种(物理的或者虚拟的)port的架构,并且允许在几个客户端之间共享port。
服务器端,C32提供了一个插入的框架以支持不同的port实现。这些插入的CSY模型通常直接与手机设备驱动通信。Symbian为ARM架构提供标准的UART port。对于CSY的开发,Symbina工具包不需要,除非CSY需要直接和设备驱动整合在一起。
C32暴露的API有:
Ø RComm(c32comm.h)。提供一个port。
Ø RCommServ(c32comm.h)。C32服务器的服务器session。
Ø CPort(cs_port.h)。一个新的port协议模型的基类。
Ø CSerial(cs_port.h)。创建新的port实例。
3.6.1 我需要Symbian工具包来开发Comms服务器?
所有的C32的API在授权者的SDK中都可以公开的得到。
你不必使用DevKit或者BAK来做C32开发,除非你正在开发一个正在直接和设备驱动通信的port。作为port示例程序的唯一源代码来源,DevKit会很有用。
3.6.2 我想用Symbian工具包做,但是不能做的是什么?
你不能直接和信号栈通信。
电话通信TSY通常通过一个C32port连接信号栈。ETEL用非共享方式打开port,所以你不能通过C32直接发送任何命令(例如,AT命令)给信号栈。然而客户端在数据调用期间可以从ETEL借用硬件连线port(A client can however borrow the hardwired port from ETEL for the duration of the data call)。
3.6.3 附加的源代码信息
“Symbian OS Communcation programming”一书有一些基本的串行通信信息。在公共SDK中也有一些很好的文档和例子。(» Developer Library » Symbian OS Guide » C++ API guide » Serial Comms)
关于如何实现你自己的Port的公开的文档几乎没有。DevKit包含了一个UART port例子。源代码在DevKit中的路径为:...\src\common\generic\ser-comms。(省略)
3.8 网络和通信架构
网络子系统包含实现了一系列网络协议的组件,包括TCPIP,SSL/TLS,QoS等。子系统为来自ISO协议模型的数据链路层,网络层,传输曾和会话层提供服务。网络组件和通信架构子系统一起组成了“协议栈”。
应用程序访问网络功能主要是通过公共socket接口(和在下面列举的其他的附加API)。内部的,网络服务和协议通过一些插件来提供,包括网络接口(NIF)和协议模型(PRT)。在运行期插件可以被安装,加载和卸载。
一般的,在使用网络服务的时候,不需要Symbian工具包。只有在扩展网络架构时,DevKit或者BAK才需要。例如为了支持在一个新的网络接口上的连接,或者hook到TCPIP栈中实现IP安全问题等。
在访问下面的API时不需要DevKit或者BAK:
Ø Sockets
RSocket(es_sock.h)包含了创建,读写socket的功能,这些socket在TCP/IP,IrDA,蓝牙,SMS之上连接。
Ø 连接管理API
RConnection(es_sock.h)处理打开,开始,停止和关闭连接,操作,把RConnection附加到一个存在的接口上,提供进程信息,当子连接启动、停止和读CommDB字段时通知一个活动的连接等操作。从Symbian OS v7.0s开始,它替代了RGenericAgent和RNif。
Ø GenericAgent API
RGenericAgent(AgentClient.h)是一个网络接口管理(NIF)的插件,和NIF一起提供拨入网络功能。在V6.1之前,RGenericAgent替代了NetDial API,自从v7.0s之后,它自己被RConnetion(见上)替代。
Ø 网络接口管理器
FNif(nifman.h)提供了一个控制网络接口的通用框架,定义了一个插件架构,为了特殊的连接类型,该架构能够被一个代理所扩展。从5.0开始支持。这个API在7.0s以后被RConnection取代。
Ø Socket服务器会话
RSocketServ(es_sock.h)在使用RSocket,RHostResolver,RNetDatabase,RServiceResolver或者RConnection API之前,被用来建立一个与socket服务器的会话。它还提供了它当前关心的协议数量信息,这些协议的信息以及这些协议的加载。
Ø Host Reslover
RHostResolver(es_sock.h)提供主机名称解析服务,例如DNS,它肯会由特定的协议模型提供。名称能够被转化成协议特定的地址和vice versa。使用的协议不同,提供的功能也不同。
Ø 通信数据库
CommDb(commdb.h)维护一个系统数据库,其中存储了所有的配置设置,用来指定与多个客户端的安全连接。这个API允许你处理事务(开始,提交和回滚等)和处理数据视图。通信设置大部分通过控制面板的通信小程序写入,或者通过其它的特定的通信设置应用程序。
Ø TLS
安全套接字API为安全连接协议提供了通用接口,包括TLS。一个插件架构支持以后其他的协议的加入。底层插件的细节对客户端应用程序隐藏。在v7.0中,新的安全套接字可以使用CSecureSocket API来创建。
访问以下组件时,必须要DevKit或者BAK:
Ø NIF(.NIF),代理(.AGT)和协议模型(.PRT)(NIFMAN.H,NIFIF.H,CAgentBase.h)
这些API创建一个网络接口(像PPP,以太网等),实现一个网络代理来初始化一个特殊的连接类型,例如一个数据包连接,或者GSM数据连接。协议模型为协议的实现构成了中央组件。注意:Agentbase.h从v7.0以后被重命名为CAgengBase.h。
Ø IP Hook头(ip6_hook.h,apibase.h,flow.h,in6_dstcache.h,in_bind.h,ip6_iprt.h,posthook.h,timeout.h,in6_if.h,in_chk.h,in_pkt.h,inet6err.h,sbque.h,tcpseq.h和各种访问协议包的类头)
IP提供了一个hook接口,可以允许hook PRT模型来检测和修改出入的数据包。注意:TCPIP源代码不提供,因此不可能在TCPIP协议模型里进行调试。同时唯一的示例代码和一些文档只有在DevKit中才能得到。
Ø Rooter服务器(c32root.h)
通信服务器的管理器和提供者模型(CPM)。为通信架构的许多组件提供一个全面的环境。负责启动和停止CPM诸如ESOCK,ETEL和SerialServer。一个客户端API提供配置和监控功能,因此客户端能够获得被加载的CPM的信息,还有加载和卸载CPM以及绑定和反绑定CPM的信息。通信通道被用来在通信模块间进行异步通信。RCFChannelBase是所有通信架构通道的基类,在处理上述的通信时该类是必须的。在symbian v8.0版本中介绍了RRootServ。
Ø 通信模块之间的异步通信由RCFChannelBase(在commschan.h)处理,它支持创建和关闭方法诸如提供空间可用性的通知(检查信息发送的时间)。当数据被发送的时候,信息能够被收集起来。
Ø DHCP
支持IP地址动态分配。在DevKit中的源代码能够进行调试。
3.8.1 我需要Symbian开发包来开发网络吗?
通常,你不需要DevKit或者BAK就可以使用网络服务:这些API在授权者SDK中都可以得到。
当扩展网络服务以支持新的协议模型(PRT)或者网络接口(NIF),DevKit或者BAK是必须的。最好的例子只有在DevKit中才能得到。在Symbian的PRT/NIF实现中进行调试,DevKit是必须的。
3.8.2 我想做而做不到的是什么?
调试网络组件。你不能在网络组件中进行调试,即使使用DevKit,因为不提供源代码。特别的,TCPIP,QoS和WAP组件都没有提供源代码。
然而提供了一个日志架构,能够记录日志和跟踪信息以帮助调试。在v7.0s中有了通信调试工具,替换了原来的文件Logger(Flogger)。使用调试功能的工具和指南在如下目录:comms-infras\commsdebugutility\。
直接访问QoS API。
Symbian操作系统QoS API在Symbian工具包中没有直接暴露,但是可以通过ETELPCKT访问。SDK会暴露授权者特定的QoS API。
“Symbian OS Communications Programming”一书有一些关于Symbian网络和通信架构子系统的信息。在Symbian开发者库中有很好的文档:(» Developer Library » Symbian OS Guide » C++ API guide » Networking)
其它的好的信息可以在这里看到:http://www.symbian.com/developer/techlib/papers/cpp_comms.asp
我可以连接什么接口?
你可以使用RSocket连接下面的接口:
Ø 拨入GSM电路转换数据连接(包括ECSD)
Ø 拨入CDMA电路转换数据连接
Ø 基于GPRS/UMTS连接的数据包(包括EGPRS)
Ø 基于CDMA连接的数据包(I-95和CDMA2000网络)
Ø 通过串行连接直接访问PPP,包括各种压缩方法的支持
Ø 以太网
浙公网安备 33010602011771号