这个月早些时候,我用于编写 Android 项目的环境由
Eclipse
变成了
IntelliJ IDEA
。总体来说,这体验感棒极了,我更喜欢使用 IDEA 而不是 Eclipse 进行 Android 开发。而且现在
IntelliJ IDEA 11 EAP (Early Access)
已经有了可视化的 layout(布局) 窗口,几乎没有理由让我再使用其它的工具编写 Android 应用。我撰写本文是为了帮助其它那些正在切换 IDE 的用户。
为啥使用 IntelliJ IDEA 开发 Android?
无须再问 IDEA 是否是你心仪的 IDE,也无须再问公司是否强迫你使用它。但为了以防万一(怕你还不是疯狂粉丝),下面我要介绍一些 Android 方面的特性,正是这些特性让我转而使用它。
Find(查找)功能(Alt+F7)知道 Android 的 XML 资源(字面意义指它们的内容)的存在,因此在项目资源当中的查找工作变得更加简单。而且,我发现 IDEA 的搜索能力比 Eclipse 略显智能化。下面的例子中,你可以看到我在 layout XML 文件中查找某个 widget ID 时所发生的状况:
图01 IDEA 中查找的用法
由于 IDEA 能够识别 Android XML 资源,像 Rename(更名) (Shift+F6)这样的重构动作将在 Java 代码和 XML 中共同进行。你可以在 XML 文件中重命名某个 widget 的 ID 并更新 Java 代码,也可以在 Java 代码中进行重命名并更新 XML。下图中,我正对 XML 中某个 widget ID 进行重命名。真不错。一般情况下,我不会在注释和字符串中进行搜索,因为这实在有点太过火了。
图02. 更名重构
在 Android 方面有一些特别的意图,使 IDEA 开发之旅更加轻松。意图就是在 Eclipse 中使用 Ctrl+1 激活的 quick-fixes(快速修复)。在 IDEA 中用的是 Alt+Enter 。例如,如果在代码中引用了某个静态字符串,那么应当可以将该字符串移动到 strings.xml 中让它成为一种资源。将光标移动到该字符串,按下 Alt+Enter,接受所推荐的名称,然后就可以继续了。对于重构的 undo 操作,Ctrl+Z 也非常好用。IDEA 和 Eclipse 的一个重大差别就是对重构的支持。在 IDEA 中,无须编译资源文件来让重构生效。有一种很常见的情况是:有一份破损的文件,通过成对的自动更名或重构对它进行修补。
图03. 移动重构
最后一点,在 IDEA 11 版本之前,Elcipse Android 的一个杀手级特性是基于 XML 布局文件的可视化编辑器。个人而言,我不常使用拖放式的布局编辑工具,但我仍然认同不用重新编译和部署就能立刻看到代码所带来变化这一特性的价值。Eclipse 的该项功能曾经更好一些。但现在 IDEA 11 有了布局“Preview(预览)”模式。对 XML 进行的修改立刻就能在预览中看到更新。还可以快速更改 theme(主题),以横屏或者竖屏模式进行预览,切换到夜间模式,并选择不同屏幕尺寸。如果确实需要可视化编辑器,Eclipse 是首选。否则,IDEA 的预览功能就足够了。IDEA 博客提供了更多信息
图04. 可视化预览
让我们开始 IDEA 之旅。
适应 IDEA
基础布局并非 IDEA 和 Eclipse 之间全部的差别。有一个主代码窗口(下图中的右侧)、一个项目视图(左上)和一个结构视图(左下)。凡是在 Eclipse 能够找到的窗口,基本上也能在 IDEA 中找到。开始熟悉 IDEA 的方法之一是阅读我几年前写的 DZone IDEA RefCard。今天它仍然合用。我将图片进行了高亮处理,以展示相关的细节。
图05. 项目视图
在任何时候都可以通过按下 Escape 键跳转到代码窗口,也可以通过 Shift+Escape 关闭任何打开的工具窗口。IDEA 所没有的概念是 Perspective(视角)。也许你喜欢 Eclipse 的视角。也许你喜欢在启动调试器时,代码窗口缩小成为邮票大小的小窗口。谁知道呢,或许从某个角度来说,这也是有好处的。在此我很难赞同这种观点,关于视角我能想到的最佳词汇是“讨厌”。IDEA 所没有的另一个概念是“Team Plugin(团队插件)”。对于各种版本控制系统,很难用一个像“Team”这样的词来以某种方式进行抽象概括。相反,当你激活 Subversion 时,你就能使用 Subversion 的特性。Git 则使用 Git 特性。使用 Tools->Enable Version Control 菜单项可以激活版本控制系统。然后,通过快捷方式 Alt+9 调出版本 Version Control(版本控制)视图。
运行、调试及 Android 工具
在 IDEA 中的运行和调试与 Eclipse 略有差别。可在屏幕上端的 Run/Debug(运行/调试)下拉菜单中管理“Run Configurations(运行配置)”。
图06. 运行/调试配置
可以创建临时或者永久的运行配置。右键点击某个测试并选择 Run(运行)可创建一个临时的运行配置。如果想反复运行该目标程序,将配置存为永久配置好了。如果你是 Maven 用户,可以在 Maven 视图中右键点击某个目标并创建一个运行对象,即一个 run:jetty 目标。IDEA 对 Maven 的支持妙不可言,因此假如你是 Maven 用户的话实在是幸运了。
两种产品之间,调试器的特性非常接近。通过点击边框(或者Ctrl+F8)可以设置断点,选择并点击某个引用可以将其添加到 Watch 窗口。我注意到,Eclipse 用户更喜欢激活或禁止断点,而不是设置和删除它们。如果这是你喜欢的方式,没问题,可以通过按下 Ctrl+Shift+F8 来管理所有的断点。同时,请注意下调试器中的 Logcat 标签页,那里将显示 Android 的 Log 信息。如果是 Running(运行)而不是 Debugging (调试)程序,那么 Logcat 将输出到底部工具条的 “Android Logcat” 视窗中。
图07. 调试窗口
SDK 中所附带的主要 Android 工具可以通过 Tools->Android 菜单来调用。通过这种方式,可以导出某个已经签名的安装包,并同时启动 AVD 来管理仿真器和环境。如果需要像 “hierarchyviewer” 或 “monkeyrunner” 之类的 SDK 工具,就不得不从命令行自己启动了。IDEA 也支持内建的 Android 测试,运行单元测试时,IDE 会提示选择是进行 JUnit 测试还是 Android 测试。它会记住你的回答,因此如果选错了,只需删除运行配置从头来过。它将再次提示。
管理 IDEA 项目
IDE 切换工作最困难的部分是 Project configuration (项目配置)和 Web Server COnfiguration (Web 服务器配置)。幸运的是,作为一份 Android 指南,我们无需涉及后者。但还是需要对项目进行一些设置工作的。首先了解一些术语。“Eclipse Workspace(工作空间)” 就是 “IDEA Project(项目)”“Eclipse Project(项目)” 就是 “IDEA Module(模块)”。每个 Eclipse 工作空间由多个项目组成。每个 IDEA 项目由多个模块组成。如果有 Eclipse 项目文件,那么 IDEA 能够毫无困难地导入它们,这是入门的最便捷途径。
通过 File->Project Structure 菜单项可进行项目配置工作。还可以通过 Ctrl+Alt+Shift+S 快捷键打开该窗口,我将其称为“Paw Mash”(掌摑),因为你必须将左手做成熊掌状并捣击键盘才能够打开该窗口。在此,你可以指定源文件夹、SDK 版本和依赖性关系。如果在下拉列表中未选中任何项目 SDK,或者列表显示错误,可以点击左边面板的 SDK 项并创建一个新的。
图08. 项目配置
通过点击左边的 module 条目可以对模块进行配置。此处可将某些文件夹标记为“源”或者“测试”。默认情况下,全新的 IDEA Android 项目没有 "测试" 文件夹,因此必须添加该文件夹,并在此处将其标记为 Test Sources(测试源)。还可以通过点击中间显示的 Android 刻面来改变某些 Android 编译器设置。
图09. 模块配置
关闭窗口之前还有最后一件事情。如果正在编写 JUnit 测试,那么需要将 JUnit 添加到项目依赖关系当中。如果只是通过 @Test 对某个方法进行标注,IDEA 将会提示将 junit.jar 添加到 classpath 当中。问题是 IDEA 将它添加为依赖关系的最后一项,这将导致测试失败并显示“java.lang.RuntimeException: Stub!”错误。调出该窗口,将 JUnit 提升到依赖关系列表的第一项。或者配置 Ivy/Maven/Whatever 为你自动完成这项操作。
图10. 模块依赖关系
那是 Project Structure (项目结构)的快速导览,让我们前进到 Settings(设置)部分。Settings(设置)指的是与项目编译无直接关联的那些选项。包括像代码风格、版本控制、插件等等内容。使用 File->Settings 或者“爪击”技术点击 Ctrl+Alt+S 打开 Settings 窗口。我将该快捷方式称为“爪击”,是因为必须将左手捏成鹰爪状并冲击键盘,通常 Settings 窗口会马上打开。 当你这么做时,它会帮助释放出一个强大的“Ka-KAW”。
这里有成千上万的设置项。最近我听到一个建议:每个 IDE 的用户都应当花上数个小时四处点击设置页面,我认为这着实是个好主意。如你知道自己要找什么却无法找到,可以在左上的搜索框中输入所要查找的词汇,设置列表将会动态地展示匹配条目的页面。比如说,如果你想要显示 line number(行号),那么输入 Line 或者 Line Numbers 然后点击所返回的页面就行了。在这种情况下,所看到画面中的高亮部分是由 IDEA 产生的,用于指出对应的设置。
图11. 设置配置
多数情况下,要进行修改的是默认设置。Showing Line Numbers(显示行数)在 Editor->Appearance 页面中。改变 Tab 和 空格的设置的操作必须基于每个文件类型进行,可通过 Editor -> Code Style 页面访问该功能。默认情况下,IDEA 允许将光标移动到某个文本文件的最后一行之后,可在 Editor 页面中将该特性关闭。版本控制是必须很好地进行配置的内容,该配置必须在 Version Control 页面进行。IDEA 中的 GitHub integration(GitHub 整合) 是一流的,但是前提是必须有 Git 支持,稍后我会推荐 BitBucket 来建立免费、私有的 git 主机。一般情况下,我发现自己总是使用 IDE 来进行本地提交操作及管理修改列表,而后通过命令行执行推送。