posts - 310, comments - 6939, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Android动了Java的奶酪?

Posted on 2007-12-29 10:29 诗特林 阅读(2009) 评论(10)  编辑  收藏 所属分类: J2EE
  应赛迪网写的专稿:http://java.ccidnet.com/art/12013/20071228/1325101_1.html

Android动了Java的奶酪?

 

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

一、        AndroidJava平台的盗版?

首先,Java编程语言与Java平台是两个完全不同的概念。前者泛指一系列编程的语法,而后者包括前者,同时又超出前者的范围。就一般而言,Java平台由三驾马车组成:核心的Java APIs(包、框架及类库)、Java字节码(编译且可执行的形式)以及Java虚拟机(JVM,执行字节码的运行机制)。就Java语言而言,只不过是Java平台中的一小部分,因为其它语言同样可以实现Java语言的功能,例如GroovyJRubyJPython等等语言,这些语言同样可以编写出运行在JVM上执行的字节码。

若某种平台想实现Java平台这样的功能,那么,首先必须实现Java SEJava ME(由于Java EEAndroid的关系没这么大,因此这里不讨论)规范所规定的这三驾马车。如果该平台没有依赖或实现这三驾马车,则只能很遗憾的说,这只是Java平台的盗版。

现在来看看GoogleAndroid平台。首先,我们必须清醒的承认,Android使用了Java编程语言,同时还使用了Java MEJava SEAPIs,但是,Android的可执行形式与Java平台的字节码形式是两码事,同时,使用的虚拟机与Java平台的JVM不一样。因此,在Java MEJava SE环境下生成的Java字节码,在Android上不能成功执行也就是情理之中的事情了。

Google没有使用标准的JME作为运行Java应用软件的引擎,而是自己为Android开发了名为Dalvik的虚拟机。开发人员表示,从技术角度来看,使用Dalvik既有优势,也有劣势,但技术可能不是Google这么做的原因。这可能需要从Google的企业文化角度去考虑:自由、创新。当然,将Dalvik作为避免使用JME所带来的与Sun之间的许可问题的一种方式也是Google考虑的因素之一。Google不要求手机厂商许可JME,而是开发了自己的虚拟机。DalvikJava字节码转换为了Dalvik字节码。因此Google可以说Android不是一个Java平台。

二、        兼不兼容无所谓?

Java的兼容性(Compatibility)是Java领域的一面旗帜。Sun就是靠它打下半壁江山,并与微软平分天下。Java当初的豪言壮语,“Write oncerun anywhere”令好几代Java程序员热血沸腾,但在J2ME平台开发的应用,要想不改动代码就run anywhere,难度是很大的。如果要把一个应用程序做到让大多数的机型都适用,就要考虑到方方面面,其难度是相当大的。

Sun MicrosystemsJCPJava标准制定组织,Java Community Process,简称JCP)非常努力地想实现这样的口号,其中最重要的努力就是兼容性测试。于是,当软件提供商(商业的或是开源的)实现了Java的标准,然后要做的就是交付软件进行兼容性测试,这是软件提供商获得“Write oncerun anywhere”金字招牌并大言不惭的宣称自己的软件具有兼容性的主要办法。

这就是大名鼎鼎的TCK(技术兼容性工具包)诞生的背景。说白了,TCK实际上是一套及工具,检测和文档一体的工具包,通常用于检测在一特定设备上Sun公司的KVM技术的兼容性,确保Sun公司对已确定的标准和规范的一致性。当初TCK可是JCP Java标准中强制的要求之一。

可以看出,TCK这东西并不简单。Android,既没有编译成Java字节码,又不能在JVM上运行,能通过TCK这玩意的测试吗?能与Java MEJava SE兼容吗?

众所周知,JCP负责处理和审批各种Java技术和技术规范,将新的Java特点系统化为应用程序编程接口(API),所以程序员可以有一个标准的方式调用新的技术,比如蓝牙技术或三维图形。但现有的Java的技术不能满足Google公司认为对于Android平台很重要的开放性要求。

但是不兼容又怎么了?这就是Google的气魄。天下王道胜者定。

Google公布Android手机软件平台的开发工具包时,明确表示该工具包没有遵守现有的Java标准制订过程,而是采用了Google自己的方法。于是Sun哭丧着脸说:GoogleAndroid项目会造成数种互不兼容的Java版本。而Sun负责软件业务执行副总裁格林更是大言不惭的表示:“任何制造多种平台的事情都不符合开发人员的最大利益”,就差没撂出陈凯歌的名言:“人不能无耻到这种地步”。开发人员的反馈是:帮助我们解决这一问题。

Sun委琐的想与Google合作,号称是要确保开发人员无须面对一个分裂的环境,确保这些平台和API的兼容,使应用软件能够被部署在尽可能多的平台上。而Google却是不怎么领情,不冷不热的说,开放手机联盟的成员将有助于使编程人员熟悉其Java变种。

三、        Android是在继续Java ME未竟的事业?

在本文中,笔者并非是在扬Java而有意在贬Android,事实上Android是一颗手机操作系统领域的璀璨的明珠。只是Android像一个叛逆的令狐冲一样,放着好好的Java MEJava SE标准不遵守,而是要去自创一套乾坤大挪移。Android就是想挑战Java的口号“Write oncerun anywhere”。Android首次避开了Java的老路,闯出了一条崭新的路子:可以按开发人员自己的意愿使用Java语言,而不需要老是被JCP所规定的那些框框架架所框死,这像极了Google的自由、创新的企业文化。这是否是意味着Android将会走得更远呢?

如果Android按它目前所定的方针及策略能成功的话,那对Java平台(包括Java SE)将真的是场八级地震。Android给出了一个很重要的信息:Java所定义标准的其实并不重要,“Write oncerun anywhere”其实也不重要。而这两点正好是Java平台的立足之本,而如今Android要颠覆Java的这两根筋,这不是要了Java的老命?

因此,如果只是站在Java的角度来看,Android无异于一个捣蛋的坏蛋,但站在Android的角度来看,Java其实也没什么,该退的就退吧!

虽然Android没有遵循Java MEJava SE的标准,但是AndroidJava领域甚至软件行业的地震效果将是巨大的。Android将迫使SunJCP重新思考Java MEJava SE标准,有可能催生一种新平台,它比Java SE瘦一点,但比Java ME更加健全一点。那才是AndroidJava领域所做出的最大贡献,比起AndroidJava的“伤害”要有意义得多。

万事阴阳相扣,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 MEJava SE对手,Android显得有一点嫩气,但又充满了霸气,这一场没有硝烟的手机操作系统开发平台之战,到底鹿死谁手,还需拭目以待。


评论

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 10:47 by 隔叶黄莺
只是手机领域的开发而已,何必大呼小叫

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 11:14 by Michael Zheng
Android 的jme使用了Harmony的类库

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 11:58 by Edward's
sun是土鳖,google也不厚道

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 12:11 by wǒ愛伱--咾婆
别乱七八糟就好...创新是种不错的思想...不过.要创新的有意义..有真正的意义

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 12:52 by Ruderal
Android 也好 Sun 也好...

他们无疑都对Java的发展提供的动力.

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 13:21 by jeasonzhao
科银几年前就拉人马作JAVA虚拟机了,为的就是JAVA的平台移植性,
一个库,相同的原理

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 16:39 by mingj
当然,这对于敌人的敌人是再好不过的消息了,那个作壁上观的微软,那时可能已经笑得快合不笼嘴了。

哎,google何必呢

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 16:40 by mingj
所谓和久必分,分久必合

Android 也不是能长期一统江山的

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-29 22:45 by 千里冰封
Android算什么东西

# re: Android动了Java的奶酪?  回复  更多评论   

2007-12-30 08:53 by Matthew Chen
据说核心api也不是一样的,jfc本身是一个一栈式的api库,底层基于的jni是固有的,android并不是从底层照搬这种类层次结构,但Harmony作为遵循java标准的虚拟机实现必须提供标准的api实现,所以android从api级别也不是java程序员可以容易过渡来使用的,基本上说,android只是借鉴了java的语法和一些api接口样式,本质上是完全不同的语言平台。
另外,楼主写得实在有点言过其实了,google的android面向的是手机平台,追求的是自由和创新,那它在未来必然也会因为java语法上的对底层不友好而采用和.net同样的方式——指针,然而基于Harmony的实现应该不支持这样的做法,到最后,Dalvik必然会脱出Harmony的束缚,成为彻头彻尾的另一个.net, android有点挂羊头卖狗肉,它影响不了java。

只有注册用户登录后才能发表评论。


网站导航: