今天Google发布了 Android SDK。 它是在 Open Handset Alliance (开放手机联盟)宣布后不久发布的。Sun公司CEO Jonathan Schwartz 高度称赞了OHA以及它对Java的支持。然而,直到今天我们仍旧不是很了解Android中关于Java的一些细节。

Android使用Linux2.6作为硬件抽象层的基础,该底层系统提供了驱动支持、内存管理和网络支持等功能。在该抽象层之上是一套用C/C++编写的本地库,该库提供了如下一些特性:OpenGL、字体、多媒体编解码器、SQL Lite和用于浏览器渲染的Web工具集。其中比较有趣的地方就来自于该抽象层的上一层和Dalvik虚拟机。

Google没有提供一个Java SE或Java ME的完整版本,而是另行其道。首先,Google提供了一套Java核心包的有限子集。该子集包含了平时使用比较多的包,例如:java.nio、java.lang和java.util。除了Android的类库外,还使用了一些开源项目,其中包含Apache的HttpClient。然而,JME类和传统意义上的Java UI包(Swing和AWT)并没有出现。实际上这种方式正是Google在另一个项目GWT所采取的模式,GWT使用Java作为开发语言,但是并不是说JDK的所有特性它都支持。

Android使用了一个定制的虚拟机来运行应用程序,这些应用程序是用它所支持的Java语言子集来编写的:

每个Android应用都运行在它自己的进程里面,使用它自己的Dalvik虚拟机实例。Dalvik被设计成为可以在一个设备中有效运行多个虚拟机。Dalvik虚拟机执行Dalvik格式(.dex)的文件,该格式对于有限内存的情况做了优化。该虚拟机是基于寄存器的,并且运行由Java编译器(已经被内嵌的“dx”工具转换为.dex格式)编译成class文件。Dalvik虚拟机依赖于Linux内核来完成一些底层的功能,例如:线程和底层的内存管理。

Dalvik已经对在有限的电池和CPU的情况下移动设备的运行做了优化。Apache V.P.,JCP的Geir Magnusson 指出Dalvik使用了Apache的Harmony类库。Android SDK采用的是Apache软件许可。Ars Technica详细比较了该许可和GPLv2许可之间的差别。

上面的图片展示了Android栈示意图。蓝色部分是用Android的Java子集来编写的。这包含了应用框架服务,例如资源管理和窗口。Android Phone的核心部分、Browser和Contacts应用也是使用Java来编写的,并且运行在Dalvik虚拟机下。

Android SDK 目前支持Windows XP及之后的版本、OS X10.4.8+和Linux,同时需要JDK5或6。虽然Eclipse并不是必须的,仍有一个Eclipse3.2+的插件随着调试工具和模拟工具一起被提供。

先前一些开发者对该SDK的评论是好坏参半。一些人认为不应该使用Java lite:

……我认为这是令人失望的。没有与任何一个Java组织结盟是一个让人感到可惜的设计抉择。在我看来,Android与现存的所有东西都是不兼容的,然而这种设计毫无必要。除此之外,Android重复了很多Java、J2ME和很多开源项目的现有功能。我相信每种情况Android都会有自己的考虑,但是结果却是重复发明轮子。总的来说,我怀疑与现存的东西相比,Android的APIs是否更快、更灵活、更易用……

Ryan Block从更一般的角度提出了对Java的质疑:

Android采用Java作为应用层环境,对此感到失望的肯定不止我一个人。……Android已经拥有了比一般支持Java设备更优化的框架,一个移动多任务的Java虚拟机应用环境肯定不如操作系统的本地代码运行效率高。这一点已经可以在演示视频里面看到了,视频中一些挥动、轻点、轻触的手势比起iPhone / iPod Touch要笨拙得多,视觉上也没那么炫……

其他人比如Ed Burnette认为Android这样做是对的:

……对于开发者来说这确实是一个好消息,因为我们不必再为了不同的架构去重新编译程序,例如编译一个ARM版本,再去编译一个x86版本。这对于厂商来说也是一个好消息,因为他们在手机硬件设备的使用上拥有了更大的灵活性。他们可以采用新的处理器而不用担心影响现有的应用。……
查看英文原文: Google's Android SDK Bypasses Java ME in Favor of Java Lite and Apache Harmony
译者简介:张龙,同济大学软件工程硕士,现就职于理光软件研究所。主要从事文档工作流和办公自动化解决方案的研发工作。热衷于Java轻量级框架的研究,对敏捷方法很感兴趣。曾有若干年的J2EE培训讲师经历。参与InfoQ中文站内容建设,请邮件至 [email protected]。

更多相关文章

  1. Ubuntu下安装VirtualBox和Android(安卓)安装到虚拟机中
  2. Android(安卓)源码本地编译脚本 & 编译Android系统
  3. 创建Android(安卓)虚拟机AVD(Android(安卓)Virtual Device)
  4. Android(安卓)IjkMediaPlayer编译支持RTSP播放,降低延时500ms左右
  5. build.gradle注释
  6. Android(安卓)6.0 ContextCompat中不包含CheckSelfPermission异
  7. textview cannot be resolved to a type 的解决办法
  8. Error:Could not find common.jar
  9. [置顶] Android(安卓)CardView简单使用方法

随机推荐

  1. Android(安卓)Open Accessory Protocol 2
  2. Android模拟SD卡实现方法解析
  3. 【Android增量升级系列_01】 浅谈Android
  4. Android(安卓)X86
  5. 享受Android应用程序的Java技术盛宴
  6. Android中xml的部分属性
  7. Android(安卓)Studio常用快捷键、Android
  8. 如何一个android工程作为另外一个android
  9. Android创建和使用数据库详细指南
  10. 创建一个ArcGIS for Android(安卓)新项目