Android Studio Tips-倍数提高工作效率的Android Studio奇技

来源:互联网 发布:qq mac版手机 编辑:程序博客网 时间:2024/05/16 17:16

这是从Philippe Breault的系列文章《Android Studio Tips Of the Day》中提取出来的自认为精华的部分。
这些技巧在实际应用中能够非常大的提高工作效率。

关于快捷键

The File Structure Popup

ctrl+f12 
此快捷键可以调出当前文件的大纲,并通过模糊匹配快速跳转至指定的方法。
勾选上“show anonymous classes”后其功能相当于Eclipse中的ctrl+o
fileStructure

The Call Hierarchy Popup

ctrl+alt+h 
查看某个方法的调用路径。
fileStructure

Quick Definition Lookup

ctrl+shift+i 
不离开当前文件当前类的情况下快速查看某个方法或者类的实现。通过大概预览下调用的方法,可以避免许多未知的坑。
fileStructure

Bookmarks!

如其名,书签。帮助快速回到指定的位置,实际使用中简直爽得不行。
f11 
将当前位置添加到书签中或者从书签中移除。

shift+f11 
显示有哪些书签。
fileStructure

Find Actions

ctrl+shift+a 
对于没有设置快捷键或者忘记快捷键的菜单或者动作(Action),可能通过输入其名字快速调用。神技!!!
例如想要编译,只需要输入"release",则列表框中就会出现"assembleRelease"选项,选择就可以进行编译。
fileStructure

Move Lines Up/Down

alt+shift+up/down 
上下移动行,这个没什么好说的,肯定会用到。
fileStructure

Lines Edit

ctrl+yctrl+xctrl+d 
删除行,删除并复制行,复制行并粘贴,必备。

VCS Operations Popup

`Alt+``(是1左边的那个键) 
此快捷键会显示一个版本管理常用的一个命令,可以通过命令前面的数字或者模糊匹配来快速选择命令。
极大的提高了工作效率,快速提交代码、暂存代码、切分支等操作操作如鱼得水。
fileStructure

Hide All Panels

ctrl+shift+f12 
关闭或者恢复其他窗口。在编写代码的时候非常方便的全屏编辑框,可以更加专心的coding...
fileStructure

Rename

shift+f6 
重命名变量或者方法名。重构神技。
fileStructure

条件断点

通过右键断点,可以对一个断点加入条件。只有当满足条件时,才会进入到断点中。调试神技,只对自己关心的情况进行调试,不浪费时间。
fileStructure

进入调试模式

点击Attach Debugger(即绿色小虫旁边那个)可以快速进入调试而不需要重新部署和启动app。
可以选择为此功能设置一个快捷键或者通过前面提到的Find Actions(ctrl+shift+a)输入"attach"进行调用。
fileStructure

快速查看变量的值

按住Alt点击想要查看的变量或者语句。如果想查看更多,则可以按Alt+f8调出Evaluate Expression窗口来自行输入自定义的语句。
fileStructure

分析堆栈信息

Find Actions(ctrl+shift+a)输入"analyze stacktrace"即可查看堆栈信息。
fileStructure

分析某个值的来源

Find Actions(ctrl+shift+a)输入"Analyze Data Flow to Here",可以查看某个变量某个参数其值是如何一路赋值过来的。
对于分析代码非常有用。
fileStructure

多行编辑

强大的神技之一,用过vim的vim-multiple-cursors或者Sublime Text的多行编辑都不会忘记那种快感! 也许不是平时用得最多的技能,但是却是关键时刻提高效率的工具。
快捷键:Alt+J
fileStructure

列编辑

在vim中叫作块编辑,同样神技!使用方法:按住Alt加鼠标左键拉框即可
PS:发现Ubuntu下不可用,代替方法为按Alt+Shift+Insert之后拖框选择。
但是经过这么操作之后,神技就大打折扣了。估计是与Ubuntu的快捷键冲突了。
fileStructure

Enter和Tab在代码提示时的区别

看图!
fileStructure

提取方法

有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方法里,通常我们的做法是复制粘贴,现在我来教给大家一个非常简洁的方法,先看下gif演示吧:

怎么样很方便吧?操作方法很简单,只需要选中一些代码,然后操作快捷键 Cmd + Option + M 就ok了,Windows是 Ctrl + Alt + M







一般来说键盘用的越多鼠标用的越少,那么写起代码来效率就越高;常见的快捷键想必大家都已经掌握,接下来我就分享一些你可能不知道的但确非常实用的快捷键。

下文所有快捷键基于如下keymap
Windows: Default
Linux: Default
OSX: Mac OSX 10.5+

自动补全的时候是Enter还是Tab?

自动补全enter和tab区别

自动补全enter和tab区别

在使用自动补全的时候EnterTab的行为还是有一些细微的区别的:

  1. 使用Enter会补全你选择的语句
  2. 使用Tab的话,会替换掉你之前在这里的内容(删除后面的语句直到遇到点号,逗号,分号)

这种情况我们还是会经常遇到的,比如要替换一个资源的ID(R.id.a_xxx_xxx),想必大多数人都是先选择a.xxx_xxx删除,然后输入新的内容,或者相反;其实这时候,用Tab才是最优雅的方式。

快捷键:(在补全的时候)Enter/Tab

返回编辑器窗口

返回编辑器窗口

返回编辑器窗口

正在写代码的时候,很多操作会让焦点脱离编辑器;比如Find UsageLogcat, 切换到项目结构视图,类型继承树等;如果视图切换了如何快速切回编辑器继续写代码呢?简单的鼠标点一下编辑器就可以了,但其实还有两种选择:

  1. Esc: 让编辑器窗口获取焦点,这时候就可以输入代码了
  2. Shift + Esc: 这个会让编辑器获取焦点,并且顺手帮你把刚刚打开的窗口关闭了。

个人喜欢第二种;Find Usage完毕了,Shift + Esc, 优雅~

  1. Esc: 返回编辑器
  2. Shift + Esc: 返回编辑器并关闭当前窗口

返回上次打开的工具窗口

返回最后打开的工具窗口

返回最后打开的工具窗口

接上面那个功能,如果你Shift + Esc 写了一会儿代码,发现又需要打开刚刚的窗口怎么办?这种场景通常发生在Logcat这个Tol Window上,看完了日志,写代码,写完代码看日志;如何快速切换?

快捷键:F12

快捷打开窗口

使用数字快捷打开窗口

使用数字快捷打开窗口

有木有发现有的窗口上面有个数字?这样的窗口(工具窗)我们可以快捷打开!

  • Mac: Cmd + 数字
  • windows/Linux: Alt + 数字

任意窗口切换

窗口切换

窗口切换

上面的切换还是无法满足你的要求?记得Mac的Cmd + Tab,Windows的Alt/Win + Tab吗?Android Studio也有这个类似的功能,可以让你切换到任意窗口!

在这个切换窗口打开的时候,你可以直接按数字切换到对应的工具窗口,或者输入字母搜索右边的编辑器窗口,如果你需要关闭某个窗口,在上面按BackSpace即可。

快捷键:Ctrl + Tab

隐藏所有窗口

隐藏所有窗口

隐藏所有窗口

好了学了那么多打开窗口的技能,如果你想关闭那些乱七八糟的窗口,安安静静写代码应该怎么办?

  • Mac: CMD + Shift + F12
  • windows/Linux: Ctrl + shift + F12

如果需要恢复所有窗口,再按一次这个快捷键即可。

参数提示

参数提示

参数提示

这个功能估计很多人知道了,但是还是提一下。在自动补全以后,如果某个方法参数超级长,你不知道参数是什么怎么办?可以试试这个。

  • Mac: CMD + P
  • win/Linux: Ctrl + P



自动生成变量

自动生成变量

自动生成变量

作为一门静态类型语言,Java是有一定的类型推导能力的;那么你是否经常书写:

12
String testStr = "testStr";List<String> testStrings = new ArrayList<String>();

其实大可不必写那些恼火的类型声明的,一看就知道testStr, testStrings就知道是什么类型,再这么干不就是废话么!好在IDEA给了我们这个能力。尝试一下这个快捷键吧,会给你惊喜。

  • Mac: Cmd + Alt + V
  • Win/Linux: Ctrl + Alt + V

有的童鞋可能会问了:我使用ArrayList, HashMap的时候,习惯类型声明为List,Map等接口,这个自动生成的类型声明还是具体的实现啊,怎么办?这一点IDE已经帮你想到了,试试shift + tab,他会给你一个可以选择的类型列表~

自动提取参数

自动提取参数

自动提取参数

有时候你正在写一个方法的时候发现。哎哟,这个变量最好是当作参数传递进来啊;要做成这么一件事,你必须把这个方法内部所有使用这个局部变量的地方替换,把所有调用这个函数的地方添加参数,繁琐至极!好了有了这个你可以随便玩了:

  • Mac: Cmd + Alt + P
  • Win/Linux: Ctrl + Alt + P

当然,如果你想保留原来的方法,只是搞一个参数不同的方法(重载)出来,可以在弹出的那个对话框里面打勾。

自动提取方法

自动提取方法

自动提取方法

写代码的时候是否会发现不知不觉的这个方法已经太长了,适合分解然后提取出一个个子方法;或者是重构的时候看到一个一两千的函数,你是不是头都大了?一般情况下,我们都是把要提取的代码copy出来,然后写一个方法(还要什么该死的方法签名)然后把这段代码复制进来;其实这个过程是机械的,完全可以由IDE完成:

  • Mac: Cmd + Alt + M
  • Win/Linux: Ctrl + Alt + M

如果想改变方法的签名,在对话框里面选择你需要的就可以了~

上面提到了三个快捷键其实是比较类似的,如何记忆呢?

  1. 首先组合键都是Cmd/Ctrl + Alt
  2. 然后提取变量Variable=V,参数Parameters=P,方法Method=M

内联变量/参数/方法

内联

内联

好了学会了上面那几个快捷键,万一玩high了,比如提取了太多的方法,想“弄回去”,该怎么办呢?这个操作叫他Inline..

  • Mac: Cmd + Alt + N
  • Win/Linux: Ctrl + Alt + M

上面那个图只是参考,其实不仅可以作用于变量,还可以是方法/参数,个人觉得方法inline比较有用。

万能重构键

万能重构键

万能重构键

静态类型语言重构起来相对容易的,但是通常修改一个地方会牵扯到很多别的地方,我们只有一处一处找到这些编译错误然后手动修复。其实有好多工作是可以自动完成的,比如删除某个方法;先确认有没有人调用(Alt + F7),没有的话把方法体删了,有的话去看看调用的地方再决定怎么办。

但是重构的操作实在是太多了!我们没有办法也没有必要一个个记住,知道这个快捷键即可,我叫他万能重构键:

  • Mac : Ctrl + T
  • Win/Linux: Ctrl + Alt + Shift + T

在Win/Linux上可以考虑把这个快捷键改一下键,一下按四个键臣妾很难做到啊。。

这个重构菜单每一个功能都可以自己去尝试一下,使用之后不好用你来打我。

Select In..

说实话,想不出一个比较好的翻译 :P 干脆使用英文吧。

Select In..

Select In..

有没有这样的场景:你在Android Studio打开了一个图片文件(或者别的文件),想在资源浏览器里面查看这图片;在Eclipse里面我想大部分的人是Alt + Enter进入文件属性复制地址,然后在系统资源管理器里面打开;或者装一个EasyExplore插件。在Android Studio里面,这是内建支持的!而且还不止如此!比如你想看看某个文件在包的哪个目录,通常是不是点击Project View上面的那个小圆坐标;用这个快捷键鼠标就能搞定。

快捷键: Alt + F1

弹出的菜单有一系列的选项;按对应的数字就可以选择;其他的菜单有什么功能可以自己尝试一下。

拓展选择

拓展选择

拓展选择

这个功能应该很多人都知道;但还是说明一下,因为跟下面两个功能跟这个结合起来才有威力。这个功能太强大了,自己去按几遍就能想到很多使用场景了;我相信有了这个功能,你使用鼠标的机会会少很多。

  • Mac: Alt + up/down
  • Win/Linux: ctrl + w / ctrl + shift + w

Surround With..

Surround With

Surround With

如果你想把一段代码使用if语句包起来;又或者使用try包围一段可能有运行时异常的代码,你会怎么干?

首先用光标定位到代码块开头,写上 try {然后,光标代码块末尾加上} catch (XXXRuntimeException e) {// todo}?可以试试这个快捷键。

  • Mac: cmd + alt + t
  • Win/Linux: ctrl + alt + t

可以使用上面的拓展选择选择你需要的代码块,然后使用这个功能Surround With;如果你什么都不选择的话,那么默认选择的是光标所在行。

Unwrap/Remove

Unwrap

Unwrap

这个功能跟上面提到的是一对,有了Surround With自然就有Unsurround With;使用情况没有上面那个那么多,但是好歹一对,一起介绍吧。

高亮某东西

highlight something

highlight something

有时候看代码的时候,看到某个变量想知道哪里使用了它;你还在用肉眼查找吗?或者你杀鸡用牛刀Find Usgae?其实你的需求就是把这个变量全部给我打个标签,我想直观的知道它在哪。

  • Mac: cmd + shift + F7
  • Win/Linux: ctrl + shift + F7

这个键功能远不止这个!

  1. 如果你高亮return或者throw,那么会把这个方法所有的返回点高亮出来!
  2. 高亮某个类的extends或者implements会把这个类Override的方法高亮出来
  3. 高亮import会把使用的地方显示出来

如果不想要高亮了,按下Esc就行。

显示方法调用树

方法调用树

方法调用树

在看源码的时候,你还是使用alt + F7ctrl + B在各个类之间来回穿梭吗?其实好多时候你就是想知道这个调用结构是怎么样的而已;谁是怎么一步一步滴调用谁的;这个快捷键会给你一个调用树。有了这个大菊观,继续探讨就很容易了。

快捷键: ctrl + alt + h

万能快捷键

万能快捷键

万能快捷键

记得之前提到过一个万能重构键, 有关重构的一切操作都可通过它完成。那么Android Studio这么快捷键,这么多功能,臣妾怎么可能都记住!要是有万能钥匙就好了!That’s it!

使用这个快捷键,你想到什么功能,打开它搜索就可以了;打个比方,我想看看Java的for each循环和普通的for循环底层是不是同一个实现;那么我就需要看虚拟机字节码了;我记得有这个功能但是不知道快捷键是啥;OK,Cmd + shift + A,输入bytecode:

PS:(我用的Intellij IDEA,Android Studio没有集成bytecode功能,可能搜索不到)




写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 Evaluate Expression, 知道条件断点;可是你听说过日志断点吗,Method BreakpointException Breakpoint 呢?还有高大上的 Field Watchpoint ?

几种不同的断点

几种不同的断点

你有关注过Android Studio旁边断点的区别吗?比如上图三个断点有什么不同?且听我一一道来。

调试基础

一般来说我们有两种办法调试一个debuggable的apk;其一是下好断点,然后用debug模式编译安装这个app;其二是 attach process,在Android Studio里面就是这么一个对话框:

Attach Process

Attach Process

第二种方法比较常用,我们可以在启动apk之后,直接下断点,然后attach process到制定进程,条件触发之后就可以直接进入调试模式。

其他的一些单步执行,step intostep outforce step into 等就不提了;基本的跟踪手段。

还是提一下,下断点最简单的办法,是在代码编辑器的左侧,行号右边鼠标点击一下即可。

Evaluate Expression

这个功能非常实用,可以在断点处直接进入一个求值环境,在这里你可以执行任何你感兴趣的表达式;如下图:

Evaluate Expression

Evaluate Expression

比如在断点处有一个对象object,如果你要查看它的某个属性很简单,在Debug窗口就能看到,但是如果你想要执行它的某个方法看看结果是什么呢?借助这个可以实现。当然它的功能远不止这么多,相当于直接进入了一个 REPL环境,非常实用。忘了说了,快捷键 Alt + F8 :P

条件断点

假设你的断点在一个列表的循环里面,可是你只对这个列表的某一个元素感兴趣,只想在遇到这个元素的时候才断下来;你是一直人肉 F9 直到满足条件吗?条件断点就是满足这种需求的,顾名思义,在特定条件下的断点。使用起来也非常简单,在你的断点上鼠标右键会出现一个小窗口,写上条件即可。

条件断点

条件断点

日志断点

很多时候我们调试的时候更多的是打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以经常做的事情就是在代码里面添加日志信息,输出函数参数,返回信息,输出我们感兴趣的变量信息等。

但是这么做一个问题就是,我们添加了日志代码需要重新编译;在没有 Instant Run 之前的黑暗时代这么做是非常痛苦的,每次编译少则几十秒,多则几分钟;这样无意义的等待简直就是折磨;其实,除了热部署工具,我们还可以使用日志断点解决这个问题。

首先我们在想要输出信息的地方下一个断点;然后右键这个断点,在出现的设置框里面把这个断点的 suspend 属性设置为 False ,这样虽然叫做“断点”,但是并不会真正断下来;然后,我们在 log message 里面填上我们想要输出的日志信息。如下图(注意标红位置):

日志断点

日志断点

这样,每次代码执行到这个断点的位置,这个可爱的断点并不会使我们的程序停下来,而是输出我们告诉它的日志信息,然后继续执行;非常方便。

方法断点

传统的调试方式是以行为单位的,所谓单步调试;但是很多时候我们关心的是某个函数的参数,返回值;(回想一下我们使用日志的时候打印的最多的信息难道不是函数的参数和返回值吗?)使用方法断点,我们可以在函数级别进行调试;如果经常跳进跳出函数或者只对某个函数的参数感兴趣,这种类型的断点非常实用。具体使用方法有两种方式;最简单的是在你感兴趣的方法头那一行打上断点,这时候你会发现断点图标有点不一样,这就是方法断点了,如下图:

方法断点

方法断点

另外一种方式是通过断点设置窗口, 后面介绍。

异常断点

在有些情况下,我们只对某些特定的异常感兴趣,或者我们只对异常感兴趣;我们希望只要程序发生异常程序就能断下来;这好像保存现场一样,只要发生命案了(异常),第一时间保存现场,这样什么指纹之类的线索就会清晰很多,坏蛋就算想逃也是插翅难飞啊。

Android Studio给了我们这个能力!那就是异常断点!可以在特定异常发生的时候,直接让整个程序断下来;如果你对所有异常感兴趣,直接 Throwable 即可。

具体做法是,进入 Run -> View BreakPoints 或者使用快捷键打开断点设置窗口;如下图:

断点设置窗口

断点设置窗口

点击左上角的 ➕ ,会出现一个选择框;选择Exception Breakpoint;然后会出现一个对话框,选择你感兴趣的异常:

异常断点

异常断点

Field WatchPoint

在上面我们添加异常断点的时候,点击加号的时候,有四个选项;第一个就是我们前面所说的第二种方法断点的添加方式,第三个是异常断点,那么第二个 Field WatchPoint 是干什么的呢?

有没有这样一种场景:你发现某个值莫名其妙滴不知道什么时候被谁给修改了,罪魁祸首是谁?Java虽然是值传递,但是引用也可以是值;对象全部存放在堆上面,而堆是被所有线程共享的,因此在非常复杂的场景下,你根本不知道这些共享变量被谁修改了,这样非常危险;在多线程环境下,不变性是一个很重要的特性,我们看到高并发的语言诸如 ErlangScala 对于这种不变性都有着某种程度的支持。

好吧,扯远了;那么我们怎么揪出这个修改我们值的捣蛋鬼呢?那就是这个 Field WatchPoint的功能了;使用它我们可以在某个Field被访问或者修改的时候让程序断下来;完美解决这个问题。

下断点的方式和方法断点类似,也有两种;第一种是直接在某个字段的声明处下断点,这时候断点图标会改变,如下图:

Field WatchPoint

Field WatchPoint

右键这个断点我们可以进行一些设置,比如默认是被修改的时候断下来,你也可以改为每次访问这个字段就断下来。

另外一种方式是 Run -> View BreakPoint 打开设置,与异常断点类似。

远不止这么多

上面介绍了这么多给力的功能,其实还有很多细节;打开断点设置窗口(Run -> View Breakpoint`):


android-butterknife-zelezny

android-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化,对于我来说是开发必备,本人也对此插件进行了一些优化,个人感觉用起来更爽 ,博客地址:ButterknifePlugin  

注意:需要先导入butterknife包才能使用


Gsonformat

可根据json数据快速生成java实体类


简单实体类

复杂实体类

Android Postfix Completion


AndroidAccessors


Lifecycle Sorter

可以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K


Ctrl+alt+K

JsonOnlineViewer


CodeGlance


看右边

findBugs-IDEA

顾名思义,就是帮你一起找bug的,当然Android Studio也提供了代码审查的功能(Analyze-Inspect Code...)


ADB WIFI

使用wifi无线调试你的app,无需root权限

Android wifi无线调试App新玩法ADB WIFI

ps:第一张图是作者自己改编插件截图,下载地址Butterknife-Plugin,以上所有插件都可在android Studio plugin 仓库中找到

转载自:http://www.jianshu.com/p/6f5f818afe4b?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

Links

  1. Android Studio Tips Of the Day - Roundup #1
  2. Android Studio Tips Of the Day - Roundup #2
  3. Android Studio Tips Of the Day - Roundup #3
  4. Android Studio Tips Of the Day - Roundup #4
  5. Android Studio Tips Of the Day - Roundup #5
  6. Android Studio Tips Of the Day - Roundup #6

转载自:


倍数提高工作效率的Android Studio奇技
0 0