2004年,移动开发恐怕成为了最时髦的字眼。在最近一份调查显示,有24.34%的受访者涉足嵌入式/移动设备应用开发,这个数字可能略高于实际的比例,但也足可说明嵌入式/移动设备应用开发是一块诱人的新鲜奶酪。J2ME是嵌入式/移动应用平台的王者,Linux和WinCE分列二、三位。Nokia等厂商力推的Symbian平台目前开发者占有率尚未达到满意水平,考虑到调查项合并了嵌入式设备(例如PDA)和移动设备(例如智能手机),Symbian、WinCE系列在移动平台上会是竞争的主要两方。如果厂商能在标准实现上做得更加规范,则J2ME的跨平台特性会发挥得更加淋漓尽致,继续保有王者地位。
J2ME是SUN公司推出的针对嵌入式消费类电子产品的开发平台,与J2SE和J2EE共同组成Java技术的三个重要的分支。J2ME实际上是一系列规范的集合,由JCP组织制定相关的JSR并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK测试,这样确保兼容性。比如MIDP2.0规范就是在JSR118中制定的。J2ME平台的形成颇有些Java技术回归起点的味道,我们知道Java本来就是针对消费类电子产品而生的一门编程语言,而后才慢慢发展为一门技术、一个平台的。
谈到J2ME我们通常都会说到一个词KVM,而这可以认为是J2ME的起源,KVM之父Antero Taivalsaari本来在SUN公司参与一个名叫Spotless的研究型项目,由于他曾经有着在世界知名电信设备制造商工作的经历,这使得他萌发了在移动终端设备,比如手机,上实现java虚拟机的想法,而这得到了经理的支持。随后AT做为领导者带领团队开发了能够在手机这样的移动终端设备上运行的虚拟机和CLDC核心类库。慢慢的J2ME浮出了水面。
J2ME的设计应该说是众多顶级工程师的结晶,她被设计的非常灵活。在J2ME中非常重要的两个概念是Configuration和Profile。Configuration是支持最大范围设备的最小的平台,在这一层还包括了Java虚拟机。Profile是针对特定的设备提供相应的开发包集合。另外针对某些设备特有的功能特性,J2ME还推出了Optional Profile的概念。比如Mobile Media API。
在J2ME平台中有两个主要的Configuration,一个是Connected Limited Device Configuration,一个是Connected Device Configuration。区分的标准则是按照设备的处理器、内存、联网能力等硬件特性。由于这些规范制定比较早,而现在的移动终端设备的处理和存储能力都有了质的飞跃。因此不再列出区分的标准,因为那已经没有了意义,你甚至会认为那是错误的。目前J2ME的应用主要还是基于CLDC的,因此本文将主要向读者介绍基于CLDC的J2ME平台。不过笔者在两家世界著名电信设备商参加的开发项目表明,基于CDC的应用将慢慢占领主流市场,因为CDC提供了更强大的类库支持。
Mobile information Device Profile位于CLDC之上,在CLDC规范制定出来后并没有引起开发者的广泛注意,市场也没有因此而发生变化。原因是CLDC中并没有提供图形用户界面编程的接口,这样应用程序就没有和用户交互的能力了。MIDP1.0的推出受到了开发者的广泛关注,在MIDP1.0中提出了一种新的应用程序模型MIDlet,开发者还可以用MIDP中提供的javax.microedtion.lcdui包开发图形用户界面程序,用MIDP1.0的子系统Record Management System进行数据的持久性操作,借助于CLDC中提供的Generic Connection Framework的联网能力可以通过HTTP协议访问Web服务器,J2ME几乎无所不能。
然而一些问题也慢慢暴露出来,由于MIDP的规范制定得过于宽泛、提供的功能有限,导致各个厂商在实现MIDP的时候在功能特性上存在很多差异,比如应用程序的大小、RMS的存储空间、并行存在的线程数量等等。更糟糕的是各个厂商还实现了很多J2ME之外的功能,例如Nokia UI API中提供了声音处理以及全屏等功能,这样破坏了Java跨平台的特性,如果你得程序中应用了Nokia UI API的话,那么它就不能移植到Motorola的手机设备上了。
为了弥补这些不足,SUN在随后的MIDP2.0中推出了MMAPI的一个子集来解决声音处理的不足,并设计了一个独立的游戏开发包javax.microedition.lcdui.game用于游戏开发,还对push、socket联网等特性提供了支持。在JSR185中更是推出Java Technology for the Wireless Industry使得规范更加严格,提高了应用程序的兼容性。不仅如此,J2ME中的可选包更是各显神通,Bluetooth API,SIP API for J2ME和Mobile 3D Graphics都提供了非常强大的功能。
J2ME的发展与竞争
软件环境飞速发展的同时,J2ME平台的硬件环境和市场同样越来越成熟。Java手机的数量在成倍增长,预计2006年java手机数量有望突破6亿部。硬件中加快集成Java预计将进一步促进Java在市场中的普及,J2ME将成为事实上的标准。到2006年,Java手机预计将占全部手机出货量的83%。与此同时移动增值业务的突飞猛进大大的推动了J2ME技术的发展,预计到2008年全球与Java相关的移动增值业务市场总值将达到147亿美元。
2004年微软公司开始逐渐进入移动通信行业,并与美国的电信设备制造商Motorola推出内置微软SmartPhone的手机,打入手机市场。另外高通的BREW和Nokia的Symbian也一直认为是J2ME的竞争对手。不过目前他们的市场占有量都还很难和J2ME平台相比。BREW的兼容性差是最大的缺点,2004年中国联通不甘心受制于高通的限制,而与SUN公司联手打造了UniJa平台。笔者认为微软提供的Mobile Windows和Nokia的Symbian平台将是J2ME最大的竞争对手,Symbian是目前最成熟的手机操作系统,通过使用Nokia提供的SDK,开发者可以使用Java或者C/C++进行应用程序的开发,遗憾的是Symbian的开发资料相对贫乏,C++语言的开发效率比Java要低 ,这些都给基于Symbian操作系统的C++开发的推广带来了不利的影响。
国外的Motorola和国内的多普达等厂商陆续推出了基于微软SmartPhone操作系统的手机,表明了微软进军移动开发市场的野心,通过使用微软提供的SDK,开发者可以在手机上使用Compact .Net Framework进行高效的开发,当然也可以使用C/C++。然而毕竟微软刚刚进入移动开发市场,市场占有率还不高。
J2ME平台是开放的,目前已经占领了绝对份额的市场。我们有理由相信J2ME将继续成为移动开发的领导力量。