Android与Java在编译及类库方面的主要区别

转载 2015年11月18日 11:45:46

在Java中,你写好Java源文件,用Java编译器将其编译成Java字节代码,然后在Java虚拟机中运行这些字节码。在Android中,情况就有些不同编写Java源文件,仍就使用相同的Java编译器将其编译为Java字节代码但在这之后,你还得再一次使用的Dalvik编译器重新编译成为Dalvik字节码。正是这些Dalvik字节代码,Dalvik虚拟机上运行2-2展示了在标准Java中左)与在Android中使用Dalvik(右)编译过程的区别。

  

2

图2-2. Java与Dalvik

  

看起来你在Android编程工作中会比在Java中做更多的工作。然而,这些编译工作都会由工具软件自动完成,比如说Eclipse和Ant,你永远不会注意到这些额外的步骤。


你可能会奇怪,为什么不直接从Java源文件编译Dalvik字节?有一堆原因造成这额外的步骤早在2005年,Dalvik创建之初,Java语言正在经历频繁的变化,但是Java字节码相对来说是“坚如磐石”因此,Android团队选择相应Java字节代码而不是Java源代码用于Dalvik


由此产生的“副作用,在理论上你可以用任何其他能够编译成Java字节码的语言来编写Android应用例如,可以使用Python或Ruby我说“在理论上“,因为在实践中需要作为SDK组成部分的相应库文件支持开源社区很有可能在将来想出了一个解决方案

  

另外一个值得注意的事情是,Android中的Java类并非一个标准的Java类集合。Java通常按以下形式发布:

  

Java标准版本  

    用于普通桌面应用的开发

Java企业版本

    用于企业应用的开发

Java微版本

    用于移动应用开发

  

Android的Java库更接近于Java标准版本。最主要的区别是Java用户界面类库(AWT和Swing)被摒弃了,取而代之的是Android特定的用户界面类库。Android还在标准Java类库上增添了不少新属性,能够支持绝大多数的Java标准属性。于是,你就可以任意使用绝大多数的Java类库,同时还会有一些新的可用。


节选自O\'REILLY出版社的<Learning Android>一书第二章一个小节---简单介绍了Android与Java在编译及类库方面的主要区别。

C、C++、ANDROID、JAVA各有什么区别?

1、C和C++       如果学完C,想在下面领域大展身手,那么学C++吧    嵌入式开发、游戏开发、驱动开发、操作系统开发、数据挖掘、桌面软件开发等。   (具有黑客潜质)。 2、C#     ...
  • qq_34198917
  • qq_34198917
  • 2016年04月23日 19:58
  • 348

android 如何用jar包代替java代码编译

1. 先完整编译一遍工程(任意eng/user),然后保存要替换java代码的jar包,在alps/out/target/common/obj/JAVA_LIBRARIES/xxx__intermed...
  • sergeycao
  • sergeycao
  • 2014年10月10日 09:47
  • 1386

在Android源码中编译自己java应用程序

上一篇文章中讲了一个打通jni,java framework,application三层的练习, 下面讲下如何在Android源码中编译自己的与hellojni对应java应用程序。 1....
  • mr_president
  • mr_president
  • 2012年07月06日 19:36
  • 4565

Android与Java在编译及类库方面的主要区别

在Java中,你写好Java源文件,用Java编译器将其编译成Java字节代码,然后在Java虚拟机中运行这些字节码。在Android中,情况就有些不同。您编写Java源文件,仍就使用相同的Java编...
  • xiaofei0859
  • xiaofei0859
  • 2015年11月18日 11:45
  • 823

android源码平台下JAR包的引入与编译

转自:http://blog.csdn.net/sjz_iron/article/details/8348265 在应用开发过程中,常常需要引入第三方JAR包,或将自己的一些代码打包为J...
  • c_z_w
  • c_z_w
  • 2018年01月07日 12:26
  • 68

javascript 跟 强类型语言不同的特性

1.变量的作用域 var b = 5 function fn() if(true) { var a = 10 } g = 11 } 上...
  • yuqixiansheng
  • yuqixiansheng
  • 2016年08月10日 15:24
  • 663

企业信息安全的发展影响公司的核心竞争力

随着计算机和网络技术的普及发展,公司和企业的办公方式和业务流发生了翻天覆地的变化。...
  • shenxinda_lu
  • shenxinda_lu
  • 2015年08月25日 13:27
  • 430

Android Studio运行Java的方法

Android Studio的app工程编译生成的apk运行在手机或者模拟器。  有时为了调试一些工具类, 我们想运行Java代码在jvm中, 那该怎么办呢? 目前有2种方法 : 1、在Java文...
  • brycegao321
  • brycegao321
  • 2016年09月20日 13:40
  • 3088

在Android项目中使用Java8

之前由于Android平台不支持Java8,如果我们想在Android项目中使用Lambda表达式、Stream API等Java8中的新特性就必须使用Retrolambda、Lightweight-...
  • baron_leizhang
  • baron_leizhang
  • 2017年03月02日 15:47
  • 926

浙江省高中信息技术会考2004年6月选择题(十套选择题) 答案已给出

浙江省高中信息技术会考2004年6月选择题++++++++第一套++++++++1.冯·诺依曼理论体系下的计算机五大逻辑部件是(      )(A)CPU、控制器、存储器、输入设备、输出设备   (B...
  • panzan6734
  • panzan6734
  • 2006年06月10日 22:56
  • 4820
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android与Java在编译及类库方面的主要区别
举报原因:
原因补充:

(最多只允许输入30个字)