Eclipse有其自己的术语,这些术语背后的概念是理解Eclipse的关键。这些概念是在很长的产品生命周期中逐渐衍化发展而来的,始自最初的VisualAge(在20世纪80年代中期用SmallTalk语言编写的开发工具)。当前版的Eclipse是用Java语言实现的,基于Equinox框架,它实现了Java软件系统OSGi模块化规范,OSGi是在manifest文件中指定动态加载模块即bundle的生命周期和依赖关系的规范。也就是说,Eclipse是框架中的模块集合。当增加或删除模块时,如果这些模块对其他模块有依赖,可能的话,Eclipse会自动满足这些依赖关系。
关于Equinox OSGi实现的更多信息,包括启动Eclipse时所发生的事情的详细解释,可以访问下面这个链接了解:http://eclipse.org/equinox/documents/quickstart.php。
插件
安装Android软件开发工具时,已经在Eclipse中添加过插件:Android开发工具(ADT)插件。插件即OSGi包(OSGi bundle)。
Android SDK在Eclipse中添加了两个插件。可以使用插件视图来查看这两个插件,即选择Window→Show View→Other,展开Plugin development项,然后从视图列表中选择插件。可以看到如图5-2所示的列表。
图5-2:Eclipse环境中的所有插件列表
注意:在本章及本书的其他章节中,Eclipse视图截图都是分离(detached)模式显示,一个独立的窗口显示,这样我们不需要去掉截图周围的视图和工具栏。屏幕上的视图显示方式取决于你所使用的Eclipse透视图及该透视图下的其他视图。右击视图标题,会弹出一个快捷菜单,其中有视图显示方式的各种选项,其中一个选项是Detached。
插件是按字母顺序排列的,因此你会在列表上方看到Android SDK的两个插件:com.android.ide.eclipse.adt和com.android.ide.eclipse.ddms。打开这两个插件的视图。在本章的后面我们将查看这些插件的一些信息,看看它们是如何修改Eclipse环境的。继续研究这个插件列表,你会发现Eclipse本身也是基于一系列插件组装而成的,通过这个列表可以全方位地了解Equinox OSGi的实现。
工作区
Eclipse需要保存很多状态,这些状态保存在工作区(workspace)中。第一次运行Eclipse时,它会询问你是否要创建工作区。此后,启动Eclipse时,它会直接进入上一次所用的工作区,在该工作区下在最近一次退出前包含的所有项目、文件和视图,仍然会载入进来,Eclipse是通过读取工作区之前的状态来获取这些信息的。在Eclipse中,工作区是使用目录实现的。
每个项目都属于一个工作区。默认情况下,新建项目时都会在工作区的目录下创建新目录,即使是根据不在当前工作区目录中的源代码创建的项目也会在当前工作区目录下面再新建一个目录。
不同的工作区是相互独立的。一个工作区的设置只对这个工作区有效。可以考虑为不同平台单独建立工作区,这些工作区的使用环境可能有显著区别,如Rails项目和Android项目。可以同时启动多个Eclipse实例,各个实例使用不同的工作区。假设有一些基于Eclipse的Web应用框架工具,这些工具所需的Eclipse版本和Android开发所需的版本可能不兼容。为Android开发建立一个独立的工作区,其状态就可以单独保存,也可以同时运行不同版本的Eclipse。
Java环境
在Eclipse下的Java软件开发中会用到3种不同的Java环境。
Eclipse的Java运行时环境
第一个环境是Eclipse本身的运行基础,Eclipse需要在这个运行时环境中运行。第1章P9“Eclipse集成开发环境(IDE)”一节介绍了安装Java开发工具和运行时环境的步骤,如果系统还没有安装,则可以参考本节的介绍进行安装。如果Eclipse需要使用不同的Java运行时环境,则可以在Eclipse安装目录下的eclipse.ini文件中,对该选项进行手工配置。例如,当Eclipse运行时出现了内存溢出,需要调整的应该是这个运行时环境。
Java编译器
第二个环境用于编译代码。Eclipse有其自己的增量式Java编译器。除了生成编译好的Java.class文件,它还会创建错误消息,在Java编辑器里显示,并生成Eclipse的智能输入提示、代码自动补全等所需的信息。该环境是可以在Preferences窗格的Java→Compiler中配置的,但是也可以在项目的Preferences中对具体项目进行专门设置,项目的配置会自动覆盖默认的配置。
此外,该环境也包含编译应用所用的库文件的描述。如果查看Android应用的Preferences→Build Path,则会发现项目依赖的库文件列表中没有包含Java运行时环境。相反,Android项目依赖于特定版本的Android库。因为Android工具是以插件形式整合到Eclipse中的,所以Android库的版本无法在Build Path窗口中直接修改。如果要修改Android库的版本,则必须在Android Preferences窗格中进行。
应用运行时环境
第三个环境是运行应用的运行时环境,对于Android应用来说,这个环境就是Android模拟器。安装开发环境时,或者说当你安装了SDK,或者当你安装了ADT插件,你已经至少安装了一个Android虚拟设备(AVD)。当创建一个新的Android项目时,会把这个项目和其中一个AVD关联起来。插件使用适当的配置文件来安装编译环境和运行应用所用的模拟器,以减少运行时环境之间的不匹配——在Android 2.2版本的库文件上编译的应用可能在1.5版本的平台上无法运行。
项目
对于软件开发人员,Eclipse项目即他们正在开发的程序。对于Android软件开发人员,Eclipse项目即Android应用。对于Eclipse,项目即Eclipse插件知道应该运行哪个软件,当创建Android项目时,项目的数据文件包括Eclipse用于从不同的插件选择代码来执行不同的操作的信息。调用ADT插件,创建包含正确的文件和目录结构设置的Android应用项目。当编写Android项目文件时,在打开XML文件(如布局和manifest文件)时,会自动启动正确的编辑器。当修改了项目中的文件时,也会自动调用正确的编译器来对应用进行编译。
编译器和artifact
Eclipse框架中对编译器(builder)的定义是用于将项目源文件生成项目的artifact文件。artifact是从源文件编译生成的文件。Android Eclipse插件定义了一些新的编译器,它们根据.class文件生成.dex文件。创建用于标识XML文件中指定的资源的Java常量,创建apk文件,并执行一些其他的把代码转换成可安装包的Android特定操作。当发生变化时,Eclipse会重新生成可安装的应用。可以运行或调试这些应用。
将Java编译器输出的.class文件转换成Dalvik虚拟机可解释的.dex字节码文件,是一个很妙的技巧。这使得可以使用Java来编程,可以使用成熟的编辑、重构工具及很多可以提高Java编程的高效性和可靠性的其他工具。
扩展
扩展(Extension)是插件扩展Eclipse功能的方式。作为Android软件开发人员,不需要操作或更改扩展,但是当打开插件视图(Plug-ins view)时,可以查看Android插件所添加的一些扩展。这将有助于你对于ADT插件和Eclipse系统的其他方面之间的关系有更具体的认识。在插件视图下(如图5-2所示),双击插件com.android.ide.eclipse.adt,会看到扩展视图,其中列出了插件的扩展,如图5-3所示。
图5-3:ADT插件的扩展列表
举个例子,可以选择名为org.eclipse.core.resources.builders的扩展,在扩展视图的右边,显示的是扩展名:Android Resource Manager、Android Pre Compiler和Android Package Builder。这些扩展需要处理Android资源;预编译AIDL(Android接口定义语言,Android Interface Definition Language)成Java代码,在第3章将对Android接口定义语言进行描述;把Java编译器生成的.class文件转换成.dex文件,并编译生成.apk文件,.apk文件可以部署在Android设备或Android虚拟设备上。
展开org.eclipse.ui.editors项,会看到ADT插件添加到Eclipse系统中的编辑器列表:Android Manifest编辑器、Android XML Resources编辑器。该列表中还有很多其他的扩展,这可以使你大致了解将Eclipse转换为Android软件开发工具所需的代码量。这里介绍的扩展足以说明一些最重要的方面:如何编译Android程序,在Eclipse环境中应该添加哪些插件来支持Android特有的文件,包括组成manifest、布局和其他资源的XML文件。
同样,如果你研究其他ADT插件,也可以了解到Dalvik调试监控服务(DDMS)特性是如何添加到Eclipse中的。
关联
关联(association)描述项目内的文件如何和编辑器中的其他操作选项关联。例如,Android项目内的Java文件和所有Java项目一样也是使用Java编辑器编辑的,而XML文件则使用Android专用的XML编辑器编辑,包括Android Manifest编辑器或Android Resource编辑器。这些编辑器知道如何编辑这些文件中的专门结构,但是在其他方面存在不足,例如用Outline视图编辑的通用结构。如果想通过XML编辑器打开Android XML文件而不是该文件需要的关联文件,则可以通过源文件的上下文菜单中的Open With命令重载这些关联。右击Package Explorer视图中的文件,会弹出该命令。
Open With命令会显示所选中的文件的编辑器选项。如果选择Other选项,就可以看到Eclipse中配置的所有编辑器的列表,而且还提供了可以打开包含外部程序的文件选项。