本文介绍了如何使用Android Studio快捷键和活动模板(Live Template)改进开发效率。
作为开发者,我们生活在一个快节奏的环境,必须一直寻求办法,把软件建造得比之前更好更快。拥抱并且从里到外地掌握这些更好的工具,是这样一个把软件开发得更好更快的机会。不管我们喜不喜欢这样,这样能帮我们更接近传说的“10倍”效率。(《“10倍效率”程序员/开发人员的习惯》)
我来专门谈谈怎么利用 Android Studio 键盘快捷键、重构选项和活动模板的力量,来尽你想象地快速导航和重构你的代码。当你能有效地运用这些快捷键时,重构、重命名和改进代码的快捷键接近于零冲突。当热键没有冲突时,你会开始注意到这些过程会自动连续地发生。而当热键有冲突时,你会看到有些你想重构的代码,并且会想:“这会打断我的工作流。一会儿我回头再处理它。”有多少次你真正地回过头来处理它了呢?所以,让我们减少热键之间的冲突,使得我们的代码库有机会得到重构。
Jetbrains 的 IDE(包括Resharper)可以说是最好用的IDE。如果你没有充分体验过,很容易忽略这些IDE的能力。(说的就是你们了,XCode 的用户们。)快捷键和工具太多了,我不会都一一介绍,但我会着重介绍一些我最常用的和在我日常工作中最有价值的快捷键和工具。
注:我在此讨论的所有快捷键都是 Android Studio for Mac OS X 的默认快捷键。我也推荐禁用覆盖 F* 键的 Mac 快捷键,这能使得很多以下的快捷键更容易操作。
简易快捷键
我们的目标是提高速度和准确性。提速的第一步是停止使用鼠标。第一组快捷键是基于你很有可能经常做的简易操作设置的,如果你用鼠标做了这些操作,你就多花了10倍的时间。
- 编译java源码:SHF+CMD+F9
- 建立工程:CMD+F9
- 运行当前配置:CTR+R
- 在调试器里运行:CTR+D
- 打开工程属性:CMD+;
- 打开Android Studio参数:CMD+,
- 查找任意命令:SHF+CMD+A
- 自动格式代码:OPT+CMD+L
- 删除行:CMD+DELETE
- 复制行/选中区域:CMD+D
- 复制行:CMD+C (未选中任意区域时)
- 选择下一个:CTR+G
基于范围的选择区域
另一个重要的避免接触鼠标和加速你的工作流程的方法,是改进对文本的选择。当你选择文本的大部分时候,你是在试图将它选择为一个有效的单元。当很多代码是嵌套的时候,尝试找出合适的插入语并选择这些代码是很难的一件事。快捷键把这件事变得简单快捷了。
- 选择下一个更高的范围:OPT+UP
- 选择下一个更低的范围:OPT+DOWN
简单的重构
我们的下一个目标是在我们想要做简单重构的地方识别出一些现存的代码,而且要做得又快又准确,不会让心跳漏拍。在我们想要改变的范围内,你只需敲一下键盘,就能做到下列这些事:
- 重命名:SHF+F6
- 提取域:OPT+CMD+F
- 提取变量:OPT+CMD+V
- 提取参数:OPT+CMD+P
- 提取常量:OPT+CMD+C
- 提取方法:OPT+CMD+M
为代码作导航
我们把大量的时间花在了在修改之前理解现有的代码上。如果我们能在代码的不同区域之间无冲突地切换,那么我们就能保持上下文的完整性,同时保证速度。
- 打开类:CMD+O
- 打开文件:SHF+CMD+O
- 找到标记:OPT+CMD+O
- 查看标记完成:CMD+B
- 查看完成(如果是接口或者抽象):OPT+CMD+B
- 找出符号所有的引用处:OPT+F7
- 导航回上个位置:CMD+[
- 导航到前个位置:CMD+]
- 切换到最近用过的文件:CRT+TAB
代码生成
不幸地是,我们耗费大量的时间,一遍又一遍地写着同样类型的代码。我们试着保持DRY原则,但是到最后,大多数情境下,重复的代码是不可避免的。为了应对这些情况,Android Studio 提供了一些不同的方法作为帮助。
意图操作(又称读心操作)
如果代码还不是完成品,当你认识到 OPT+RETURN 的威力时,它将成为你最好的朋友。它基本上能读取你的想法,并对你想要对光标位置所在地的上下文做的改动给出建议,尤其是对那些标注为红色的、有下划线的或者高亮的文本。
If/Switch actions: OPT+RETURN
还有,如果你习惯在定义某些函数或变量之类的东西前就引用它们,Android Studio只需敲一下键盘,就可以拥有足够的信息来创建它们的存根。这对你能想到的任何对象都适用,比如类、公开方法、私有方法、域、变量、参数等等。在生成代码时,它将和类型智能匹配。
创建方法:(众多例子中的一例)
和上下文相关的操作太多了,我甚至都不知道从哪个说起。我建议,在你的意图可以被推断的大量地方放上你的光标,然后按下 OPT+RETURN,看看你能做些什么。
自动完成的覆盖方法
无论啥时候,当你在一个拥有可以被覆盖的方法的子类里,你只需要键入该方法名,把它从智能弹出菜单里选中,为它自动生成一个方法存根即可。
活动模板
循环
- 单次循环:“[变量名].for”+TAB
- 第 i 次循环:“[变量名].fori”+TAB
- 第 r 次循环(可保留的):“[变量名].forr”+TAB
日志
- 生成调试日志:“logd”+TAB
- 生成错误日志:“loge”+TAB
- 生成信息日志:“logi”+TAB
- 生成TAG声明:“logt”+TAB
- 生成参数日志:“logm”+TAB
- 生成方法回归日志:“logr”+TAB
等等等等……
- 创建带参数的newInstance() 方法:“newInstance”+TAB
- 创建Toast声明;“Toast”+TAB
- 增加布局高度=“包内容”到xml控件:“lhw”+TAB
我可以一直列举下去,几天几夜都行。我会鼓励你打开Android Studio的参数面板,探索活动模板,看看所有可能会发生的事情。没找到你要的选项?你也可以随心所欲地创建属于你自己的活动模板。
拥有你自己的工具
本文的寓意是这样的:如果你没有好好利用手头所有可用的工具,那么你就在思考和完成品之间竖起一道障碍。移除这些障碍不仅能让你变得更快,还能帮助你更好地在代码中表述你自己。像在任何你依赖工具来进步的职业里一样,对工具足够了解,才能拓展你的能力,把想法转化为结果。
像任何依赖工具的职业一样,需要经过练习来掌握工具。一开始会很难,但是要强迫你自己不要用鼠标操作,不要用困难的方法去写代码,而是使用这些快捷键。你用得越多,操作就越简单易用,很快你就能超越你之前的工作效率。