概述

J2ME是Java 2 Micro Edition的缩写,最新的官方名称是JavaME(Sun似乎很喜欢改名字,从Oak到Java,从Java到J2?E,再到现在Java?E),可 以认为是Java为移动设备(手机、PDA以及其它计算能力和能源供应都受限的设备)剪裁的一套API。基本上,如果有J2SE的开发经验,上手J2ME 会非常快。除了个别类或方法,J2ME基本上是J2SE的一个子集。Java在保持语言体验统一性这一点上,做得确实非常好。

J2ME采用比较混乱的方式来描述自身的版本。整个J2ME API被划分为Configuration和Profile。而Configuration和Profile有各自拥有其版本。关于混乱现象的解释,一两 句话难以说清,有兴趣的同学可以随便抓本J2ME的书过来,第一章必然有大篇文字解释这些匪夷所思的现象[1]。

J2ME最吸引人的地方(或者说是吸引我的地方),就在于其针对的平台计算能力有限。这并不是受虐。运算速度、可用内存、以及最终生成字 节码尺寸的限制使得J2ME应用通常比较小巧玲珑。以早期支持J2ME的设备为例(比如Jordan手里的那部手机,zengke的就算了),可用的 Heap不过200k,最终生成的代码(包含各种资源文件,如图片)不得超过64k,这就使得面向这种平台开发的J2ME应用规模基本上不会超过一个人的 能力范围。这样可以有效避免协作、过程等等令人不胜其烦的软件工程概念的引入,从而使开发人员重新回归到编写代码的乐趣中去。

开发环境

抛开感情因素,Windows是进行J2ME开发的首选平台。为什么呢? 首先,开发J2ME所必须的开发包,只有Sun官方的WTK(Wireless ToolKit)[2]对Linux提供了良好的支持。其它如Nokia,与Windows版本的更新速度来看,其Linux版本更新相当慢且陈旧,而其 它如SonyEricsson[3]和Motorola[4]则根本没有Linux版本的开发包。 其次,数据线。J2ME的开发是离不开真机测试的。模拟器上在完美的代码到了真机上还是有可能运行得一塌糊涂。因此开发人员应该要有一个比较便捷的将 J2ME部署到手机的途径。这些途径当中,数据线显然首选。而众多的数据线中,提供Linux支持的几乎没有。

必备软件

必备软件只有一个,那就是开发包。如Sun官方的WTK,Nokia的Carbide.J[5],或者其它同类软件。以WTK为例,KToolBar提供了基本的创建项目、编译、运行、调试、打包的环境,而J2ME代码,则可以用任何文本编辑器来写。

可选软件

用优秀的IDE开发J2ME可以事半功倍。目前绝大多数的J2ME程序员都使用eclipse[6],IBM的开源Java IDE。通过eclipse提供基本的Java IDE功能(如自动代码提示、重构、build等等),通过eclipseme[7]插件管理众多WTK,可以很方便将程序在不同的模拟器上进行测试。

另外,Sun主推的Netbeans[8]也有很多人说好用。可惜我没有用过,不好妄下结论。不过曾经见过Netbeans的截图,甚至 可以直接生成J2ME项目的页面流图,确实惊艳。需要注意的是Netbeans(目前稳定版本5.0)也需要另外安装MobilityPack才行。最新 的消息刚刚提到,Sun把MobilityPack开源了。

最后,值得一提的是,Java的字节码很容易被反编译。因此几乎所有发行的J2ME应用都需要经过混淆。目前,市面上的非商业混淆器似乎只剩下了一个ProGuard[9],不过值得欣慰的是,这款开源的混淆器很好用,eclipseme也对其进行了很好的支持。

常见问题

eclipse已经集成了版本控制的能力,其默认集成的是cvs。当然,subclipse插件给eclipse提供了同样优秀的svn集成。通 常,使用eclipse来进行各种svn操作是没有问题的。但是实际使用中发现,svn+ssh的项目在windows+eclipse环境下无法正常工 作。