BREW平台主要技术的分析与总结
摘要:2003年,美国高通公司在中国推出了BREW平台,在中国获得了快速的发展和应用。时间虽然不短,但是由于高通公司的种种约束以及BREW平台本身的诸多限制,使得许多开发人员对在BREW平台下进行开发不得要领。本文深入分析了BREW平台的主要技术以及实现机制,包括模块加载机制、事件处理机制、接口机制和回调机制,以期对BREW平台有深入透彻的理解,并对BREW的主要技术进行了总结。
关键词:BREW;模块加载;事件处理;接口;回调机制
中图分类号:TP311
1 引言
如今,手机已不仅是语音通信的工具,而且逐步成为数据业务开发与应用的平台,随着科学技术的不断更新和发展,如今手机已不仅仅是满足打电话的功能,而是更多地成为人们在工作、学习和生活中的助手。在这种情况下CDMA手机产生了一种新的应用平台,也就是由美国高通公司研发出的BREW平台[1]。
BREW 是Binary Runtime Environment for Wireless(无线二进制运行环境)的缩写,是美国高通(QUALCOMM)公司为无线数据应用程序开发和执行提供的通用接口平台。它为制造商和开发人员提供了一套应用程序接口(API),可以随时对运行环境进行扩展,提供应用程序需要的各种附加性能模块[2]。
BREW 包含两个系统,一个是在运营商的发布系统,也就是平时用mobile shop 访问的系统;另一个是在手机端的BREW 运行环境系统。不同的厂商对手机所配备的操作系统一般都是独立开发的(智能手机除外),之间可能是千差万别,然而它们都共同需要运行BREW程序,这就需要依赖一个的中间层存在,这个中间层对BREW 程序提供调用的接口,而把程序的调用事实上转化为对操作系统的系统调用或对底层硬件的直接访问,由于这个中间层基本上是一个调用的中转关系,因此它本身的体积是很小的,并在BREW 运行期间一直驻留内存为BREW 程序提供服务,这也就是为什么即使操作系统在BREW 运行期间不占用内存,应用程序也无法完全的使用内存。
2 BREW平台主要技术
2.1 模块加载机制
在BREW中,Module是基本的执行单位,一个Module可以包含一个或多个Applet,或者多个Extension Class[3]。下面具体分析BREW是如何动态加载模块的。
1) Module的信息
原则上来说,每个Module都需要有标识自身的MIF文件。
2) 枚举Module信息
这一步是在BREW环境初始化的时候进行的,由于通常在开机时就初始化BREW环境,所以枚举Module信息在开机时就进行。对于BREW通过检索各个MIF文件来获得各个Module的必要信息,比如ClassID等。ClassID是一个4字节的无符号整数,作为Module的唯一标识。
3) Module加载
Module的加载是在运行时才进行的,即执行该Module的时候。Module的加载是通过调用函数AEEMod_Load()实现的,而AEEMod_Load()实际是调用AEEStaticMod_New(),该函数的部分代码如下:
int AEEStaticMod_New(int16 nSize, IShell *pIShell, void *ph, IModule **ppMod,
PFNMODCREATEINST pfnMC,PFNFREEMODDATA pfnMF)
{
AEEMod *pMe = NULL;
VTBL(IModule) *modFuncs;
... ...
// 初始化函数指针
modFuncs->AddRef = AEEMod_AddRef;
modFuncs->Release = AEEMod_Release;
modFuncs->CreateInstance = AEEMod_CreateInstance;
modFuncs->FreeResources = AEEMod_FreeResources;
// 初始化虚函数列表
INIT_VTBL(pMe, IModule, *modFuncs);
... ...
return SUCCESS;
}
在该代码片段中AEEStaticMod_New()向BREW运行系统注册了四个函数,其中就有一个AEEMod_CreateInstance()函数,这样在每次BREW系统加载Module