Android,号称"史上首个全免费开放的手机平台"。Google Android动了谁的奶酪?是Apple,还是微软?互联网时代奇迹般崛起的Google,已经成为微软的心腹大患。然而不论Google OS的谣言传得多么活灵活现,业界多么意淫Google直接挑战微软Windows操作系统,然而Google从来都是按兵不动。Google看得很清楚,桌面操作系统时代快要结束了,现在是掌上操作系统时代登场了,谁能够先一步占领消费者的手掌,谁才是真正的赢家。这一次,Google终于亮剑了,亮出来的绝对是一把无坚不摧的利剑--Android。这回该轮到Sun头痛了,原来Android动的就是Sun的奶酪。

一、 Android,Java平台的盗版?
首先,Java编程语言与Java平台是两个完全不同的概念。前者泛指一系列编程的语法,而后者包括前者,同时又超出前者的范围。就一般而言,Java平台由三驾马车组成:核心的Java APIs(包、框架及类库)、Java字节码(编译且可执行的形式)以及Java虚拟机(JVM,执行字节码的运行机制)。就Java语言而言,只不过是Java平台中的一小部分,因为其它语言同样可以实现Java语言的功能,例如Groovy、JRuby及JPython等等语言,这些语言同样可以编写出运行在JVM上执行的字节码。
若某种平台想实现Java平台这样的功能,那么,首先必须实现Java SE或Java ME(由于Java EE与Android的关系没这么大,因此这里不讨论)规范所规定的这三驾马车。如果该平台没有依赖或实现这三驾马车,则只能很遗憾的说,这只是Java平台的盗版。
现在来看看Google的Android平台。首先,我们必须清醒的承认,Android使用了Java编程语言,同时还使用了Java ME和Java SE的APIs,但是,Android的可执行形式与Java平台的字节码形式是两码事,同时,使用的虚拟机与Java平台的JVM不一样。因此,在Java ME或Java SE环境下生成的Java字节码,在Android上不能成功执行也就是情理之中的事情了。
Google没有使用标准的JME作为运行Java应用软件的引擎,而是自己为Android开发了名为Dalvik的虚拟机。开发人员表示,从技术角度来看,使用Dalvik既有优势,也有劣势,但技术可能不是Google这么做的原因。这可能需要从Google的企业文化角度去考虑:自由、创新。当然,将Dalvik作为避免使用JME所带来的与Sun之间的许可问题的一种方式也是Google考虑的因素之一。Google不要求手机厂商许可JME,而是开发了自己的虚拟机。Dalvik将Java字节码转换为了Dalvik字节码。因此Google可以说Android不是一个Java平台。

二、 兼不兼容无所谓?

Java的兼容性(Compatibility)是Java领域的一面旗帜。Sun就是靠它打下半壁江山,并与微软平分天下。Java当初的豪言壮语,"Write once,run anywhere"令好几代Java程序员热血沸腾,但在J2ME平台开发的应用,要想不改动代码就run anywhere,难度是很大的。如果要把一个应用程序做到让大多数的机型都适用,就要考虑到方方面面,其难度是相当大的。
但Sun Microsystems及JCP(Java标准制定组织,Java Community Process,简称JCP)非常努力地想实现这样的口号,其中最重要的努力就是兼容性测试。于是,当软件提供商(商业的或是开源的)实现了Java的标准,然后要做的就是交付软件进行兼容性测试,这是软件提供商获得"Write once,run anywhere"金字招牌并大言不惭的宣称自己的软件具有兼容性的主要办法。
这就是大名鼎鼎的TCK(技术兼容性工具包)诞生的背景。说白了,TCK实际上是一套及工具,检测和文档一体的工具包,通常用于检测在一特定设备上Sun公司的KVM技术的兼容性,确保Sun公司对已确定的标准和规范的一致性。当初TCK可是JCP Java标准中强制的要求之一。
可以看出,TCK这东西并不简单。Android,既没有编译成Java字节码,又不能在JVM上运行,能通过TCK这玩意的测试吗?能与Java ME或Java SE兼容吗?
众所周知,JCP负责处理和审批各种Java技术和技术规范,将新的Java特点系统化为应用程序编程接口(API),所以程序员可以有一个标准的方式调用新的技术,比如蓝牙技术或三维图形。但现有的Java的技术不能满足Google公司认为对于Android平台很重要的开放性要求。
但是不兼容又怎么了?这就是Google的气魄。天下王道胜者定。
Google公布Android手机软件平台的开发工具包时,明确表示该工具包没有遵守现有的Java标准制订过程,而是采用了Google自己的方法。于是Sun哭丧着脸说:Google的Android项目会造成数种互不兼容的Java版本。而Sun负责软件业务执行副总裁格林更是大言不惭的表示:"任何制造多种平台的事情都不符合开发人员的最大利益",就差没撂出陈凯歌的名言:"人不能无耻到这种地步"。开发人员的反馈是:帮助我们解决这一问题。
Sun委琐的想与Google合作,号称是要确保开发人员无须面对一个分裂的环境,确保这些平台和API的兼容,使应用软件能够被部署在尽可能多的平台上。而Google却是不怎么领情,不冷不热的说,开放手机联盟的成员将有助于使编程人员熟悉其Java变种。

三、 Android是在继续Java ME未竟的事业?
在本文中,笔者并非是在扬Java而有意在贬Android,事实上Android是一颗手机操作系统领域的璀璨的明珠。只是Android像一个叛逆的令狐冲一样,放着好好的Java ME和Java SE标准不遵守,而是要去自创一套乾坤大挪移。Android就是想挑战Java的口号"Write once,run anywhere"。Android首次避开了Java的老路,闯出了一条崭新的路子:可以按开发人员自己的意愿使用Java语言,而不需要老是被JCP所规定的那些框框架架所框死,这像极了Google的自由、创新的企业文化。这是否是意味着Android将会走得更远呢?
如果Android按它目前所定的方针及策略能成功的话,那对Java平台(包括Java SE)将真的是场八级地震。Android给出了一个很重要的信息:Java所定义标准的其实并不重要,"Write once,run anywhere"其实也不重要。而这两点正好是Java平台的立足之本,而如今Android要颠覆Java的这两根筋,这不是要了Java的老命?
因此,如果只是站在Java的角度来看,Android无异于一个捣蛋的坏蛋,但站在Android的角度来看,Java其实也没什么,该退的就退吧!
虽然Android没有遵循Java ME和Java SE的标准,但是Android对Java领域甚至软件行业的地震效果将是巨大的。Android将迫使Sun及JCP重新思考Java ME和Java SE标准,有可能催生一种新平台,它比Java SE瘦一点,但比Java ME更加健全一点。那才是Android对Java领域所做出的最大贡献,比起Android对Java的"伤害"要有意义得多。
万事阴阳相扣,Android除了上面的好处外,当然会给JCP带来难以治愈的伤害。因为Android的一块基石就是构建不兼容实现是一种可行的业务模型,这就有可能引发多米诺骨牌推牌效应,因为榜样的力量是无穷的,同样,反而教材的力量也是无穷的,其实的供应商也采用Android这样的策略,那JCP的标准梦想和兼容性口号将成为历史。当然,这对于敌人的敌人是再好不过的消息了,那个作壁上观的微软,那时可能已经笑得快合不笼嘴了。因为,Java领域对抗微软.NET平台的杀伤性武器就是标准化过程(如JCP)及兼容性。如果失去了这两座屏障,那Java只能来个诸葛亮挥泪斩马谡或是早点自宫算了。
事实上,Android是在继续Java ME未竟的事业。Java ME提供了统一的编程平台,但是Java ME不能调用操作系统资源,也没有提供诸多的应用工具,最终Java ME处在一个非常尴尬的位置上。而Android往下直达操作系统内核,往上直通现成的应用软件,例如联系人,日历,地图,浏览器,Android就是手机应用的未来。

四、 小结

Google对无线互联网市场垂涎已久,这已经是尽人皆知的事情。在公众场合,无论是Google全球CEO艾里克施密特博士,还是在中国媒体面前的李开复博士,都毫不掩饰Google对于无线互联网市场的向往。Android的推出就像Google在无线互联网市场亮出的一把利剑,已经是司马昭之心,路人皆知。而面对老牌的Java ME或Java SE对手,Android显得有一点嫩气,但又充满了霸气,这一场没有硝烟的手机操作系统开发平台之战,到底鹿死谁手,还需拭目以待。