成都计算机培训 网络报名 Java软件开发培训课程 朗沃成都软件Java培训中心师资介绍 成都软件培训学校开班信息 朗沃成都Java软件开发培训学校学员就业情况 Java朗沃成都软件培训中心在线咨询
成都朗沃教育课程升级啦!
□ 您现在的位置:首页> 学员天地> java学习> 正文

解析Android平台与Java之间千丝万缕的关系

朗沃成都软件培训学校在线咨询         朗沃成都软件培训学校在线报名

关键词:Java

  最近整个Java阵营都陷于一场讨论Oracle和Google之间关于Android平台的专利诉讼官司的混战中。来自“外刊IT评论”的最新翻译文章向您解释最近 Oracle 想要告 Google 的 Android 系统的原因。该文章解释 Android 平台与 Java 千丝万缕的关系。

  文章内容如下:

  最近整个Java阵营都陷于一场讨论Oracle和Google之间关于Android平台的专利诉讼官司的混战中。我已经在很多地方都发表过我的观点,但这确实是个 重大的话题,需要在所有地方反复重申这个观点 … 所以,这篇文章就是要再次的完全的揭露事实真相。

  第八大千禧年问题: Android = Java?

  前几天,有研究者宣称找到了P != NP的证据,这在编程界引起了不小的兴趣——至少为此狂热了好几天,直到开始有评论家指出证据中有很多的缺陷。我在做计算机科学系学生时研究过这个题目,但说实话,我的高等数学的水平还达不到看懂这些证据的水平(P = NP? 是克雷数学研究所提出的七个千禧年数学问题中的一个。)所以,还是让我们来讨论一个稍微简单点的问题:Android是否相当于Java?请注意,我并没有说相等,我说的是相当,就像P = NP里的那样。

  相当的类/字节码格式

  在很多层面上,Android和Java都有明显的相当。Android应用程序是用Java(TM)语言写成的,使用JDK的javac(或等效工具,例如ECJ)来编译。这个过程产生标准的Java字节码(.class文件)。这些文件再转化成Android的.dex文件,从使用的角度来看,它就是一种不同格式的Java class文件。不错,这是一种更优秀的格式;对Sun自从1994年以来的设计有了很大的改进。但就如你可以把一个GIF格式的图片转换成更高级的完美的完全等效的PNG格式,尽管它们的字节流完全的不同。

  等效的文件格式在细节的实现上非常的不同,主要是为了优化。就好比,如果我们简单的满足于低效率的视频数据流,没有采用高端的、跨不同框架的压缩技术,那我们就可以避免跟MPEGLA视频解码专利做斗争的麻烦了。

  Android特异的classfile设计有好几种动机;而为了避免和Sun的知识产权保护冲突显然是一个主要的因素。不管怎样,Google并没有走的离Java足够远。两种文件格式非常的类似。它们在特定的底层数据结构上有区别,但这些结构体在语法上一致的,存储完全相同的信息。我相信在JavaSE或JavaME VM里可以轻易的在它们的系统classloader里添加一个.dex分析器来加载”Android classes”。

  Android SDK 依赖于.java -> .class -> .dex 转换的事实情况既微不足道也毫无损失。“毫无损失”的事实很重要:当GIF = PNG 时,跟受损的JPG文件就不等了 —— 它解码不出完全相同的信息。如果JVM和Dalvik都各自独立,你很难写出一个相对简单的工具将一种编译过的代码转换成另一种 —— 而且不做任何妥协:不丢失信息,不使用冗余来补偿某种特征在一种VM中是first-class而在另一种中却不是的情况,不需要额外的runtime层 上在一种VM中实现另一种VM的核心API。

  (我知道dx转换器有多么的复杂。我看过它的源代码。那个字节码转换器是一个巨大的,全功能的反编译/重编译器,通 过SSA构造完成。但是这个转换器在概念上仍然是无足轻重的;从Java字节码到Dalvik字节码的映射在设计上是很平滑的。堆栈相对于寄存器架构中细 节上进行了优化;而重要的东西,例如VM层的类型系统是完全一致的。)

  VM相当

  这Dalvik 和 JVM 的相当也是很容易看清楚的。并不只是源代码或字节码格式上的问题:它们的runtime对等物上也一样。一但一个”Android class”被加载到Dalvik VM里,它就会像Java class一样运行,像Java class一样工作。 如果你懂得Java编程(深入到高级的,底层的细节),你也就懂得Android编程。你只需要学一些新的API和框架概念。他们是对等的系统。

  是否记得微软的.NET? 当.NET刚出世时,Java阵营迅速的反击指责.NET是对Java的剽窃。我也是其中的一份子,但今天我看问题更清楚了。是的,它过去是个严重的剽窃产品;C# 1.0 就是一个… 区分一种语言和另一种语言最简单的方法就是看它们的惯用风格 —— 例如toString() 相对于 ToString()。 但在最重要的VM规范里,微软做了很大的功课。它的CLR,CLI,和核心框架,都非常的不同于Java,所以我们不能说JVM = CLR这个等式。你不可能使用一个简单的文件格式转换工具把你编译好的Java class转换成能在.NET runtime上运行的代码。

  要证据吗?你只需看一看IKVM就知道了。这是一个非常有趣的项目,它能够使Java和.NET跨平台兼容,于是,你的Java代码可以在不做修改的情况下在CLR(或者是等效的.NET runtime,比如Mono)上运行… 但IKVM并不是一个简单的、类dx的 文件格式转换器。对Java class的转化、对Java核心API的适配,都是十分的复杂,即使对一个简单的HelloWorld程序也是这样。各个平台的内部机制,如反射,安 全,并行,异常处理,字节码验证,I/O,以及其它核心API,特

|<< << < 1 2 > >> >>|
朗沃成都软件培训学校在线咨询         朗沃成都软件培训学校在线报名
作者: 朗沃IT教育 成都中心
原载:朗沃IT教育 成都中心 lovoinfo.com
版权所有,转载时必须以链接形式注明作者和原始出处及本声明
在线客服
在线客服系统