这是从Philippe Breault的系列文章《Android Studio Tips Of the Day》中提取出来的自认为精华的部分。
这些技巧在实际应用中能够非常大的提高工作效率。
ctrl+f12
此快捷键可以调出当前文件的大纲,并通过模糊匹配快速跳转至指定的方法。
勾选上“show anonymous classes”后其功能相当于Eclipse中的ctrl+o
ctrl+alt+h
查看某个方法的调用路径。
ctrl+shift+i
不离开当前文件当前类的情况下快速查看某个方法或者类的实现。通过大概预览下调用的方法,可以避免许多未知的坑。
如其名,书签。帮助快速回到指定的位置,实际使用中简直爽得不行。f11
将当前位置添加到书签中或者从书签中移除。
shift+f11
显示有哪些书签。
ctrl+shift+a
对于没有设置快捷键或者忘记快捷键的菜单或者动作(Action),可能通过输入其名字快速调用。神技!!!
例如想要编译,只需要输入"release",则列表框中就会出现"assembleRelease"选项,选择就可以进行编译。
alt+shift+up/down
上下移动行,这个没什么好说的,肯定会用到。
ctrl+y
,ctrl+x
, ctrl+d
删除行,删除并复制行,复制行并粘贴,必备。
`Alt+``(是1左边的那个键)
此快捷键会显示一个版本管理常用的一个命令,可以通过命令前面的数字或者模糊匹配来快速选择命令。
极大的提高了工作效率,快速提交代码、暂存代码、切分支等操作操作如鱼得水。
ctrl+shift+f12
关闭或者恢复其他窗口。在编写代码的时候非常方便的全屏编辑框,可以更加专心的coding...
shift+f6
重命名变量或者方法名。重构神技。
通过右键断点,可以对一个断点加入条件。只有当满足条件时,才会进入到断点中。调试神技,只对自己关心的情况进行调试,不浪费时间。
点击Attach Debugger
(即绿色小虫旁边那个)可以快速进入调试而不需要重新部署和启动app。
可以选择为此功能设置一个快捷键或者通过前面提到的Find Actions(ctrl+shift+a)
输入"attach"进行调用。
按住Alt
点击想要查看的变量或者语句。如果想查看更多,则可以按Alt+f8
调出Evaluate Expression
窗口来自行输入自定义的语句。
Find Actions(ctrl+shift+a)
输入"analyze stacktrace"即可查看堆栈信息。
Find Actions(ctrl+shift+a)
输入"Analyze Data Flow to Here",可以查看某个变量某个参数其值是如何一路赋值过来的。
对于分析代码非常有用。
强大的神技之一,用过vim的vim-multiple-cursors或者Sublime Text的多行编辑都不会忘记那种快感! 也许不是平时用得最多的技能,但是却是关键时刻提高效率的工具。
快捷键:Alt+J
在vim中叫作块编辑,同样神技!使用方法:按住Alt
加鼠标左键拉框即可
PS:发现Ubuntu下不可用,代替方法为按Alt+Shift+Insert
之后拖框选择。
但是经过这么操作之后,神技就大打折扣了。估计是与Ubuntu的快捷键冲突了。
看图!
怎么样很方便吧?操作方法很简单,只需要选中一些代码,然后操作快捷键 Cmd + Option + M 就ok了,Windows是 Ctrl + Alt + M
一般来说键盘用的越多鼠标用的越少,那么写起代码来效率就越高;常见的快捷键想必大家都已经掌握,接下来我就分享一些你可能不知道的但确非常实用的快捷键。
下文所有快捷键基于如下keymap
Windows: Default
Linux: Default
OSX: Mac OSX 10.5+
Enter
和
Tab
的行为还是有一些细微的区别的:
Enter
会补全你选择的语句Tab
的话,会替换掉你之前在这里的内容(删除后面的语句直到遇到点号,逗号,分号) 这种情况我们还是会经常遇到的,比如要替换一个资源的ID(R.id.a_xxx_xxx),想必大多数人都是先选择a.xxx_xxx
删除,然后输入新的内容,或者相反;其实这时候,用Tab
才是最优雅的方式。
快捷键:(在补全的时候)Enter/Tab
Esc
: 让编辑器窗口获取焦点,这时候就可以输入代码了Shift + Esc
: 这个会让编辑器获取焦点,并且顺手帮你把刚刚打开的窗口关闭了。 个人喜欢第二种;Find Usage完毕了,Shift + Esc
, 优雅~
Esc
: 返回编辑器Shift + Esc
: 返回编辑器并关闭当前窗口
Shift + Esc
写了一会儿代码,发现又需要打开刚刚的窗口怎么办?这种场景通常发生在
Logcat这个Tol Window上,看完了日志,写代码,写完代码看日志;如何快速切换?
快捷键:F12
Cmd + 数字
Alt + 数字
Cmd + Tab
,Windows的
Alt/Win + Tab
吗?Android Studio也有这个类似的功能,可以让你切换到任意窗口!
在这个切换窗口打开的时候,你可以直接按数字切换到对应的工具窗口,或者输入字母搜索右边的编辑器窗口,如果你需要关闭某个窗口,在上面按BackSpace
即可。
快捷键:Ctrl + Tab
CMD + Shift + F12
Ctrl + shift + F12
如果需要恢复所有窗口,再按一次这个快捷键即可。
CMD + P
Ctrl + P
作为一门静态类型语言,Java是有一定的类型推导能力的;那么你是否经常书写:
1 2 |
String testStr = "testStr"; List |
其实大可不必写那些恼火的类型声明的,一看就知道testStr, testStrings
就知道是什么类型,再这么干不就是废话么!好在IDEA给了我们这个能力。尝试一下这个快捷键吧,会给你惊喜。
Cmd + Alt + V
Ctrl + Alt + V
有的童鞋可能会问了:我使用ArrayList, HashMap
的时候,习惯类型声明为List,Map
等接口,这个自动生成的类型声明还是具体的实现啊,怎么办?这一点IDE已经帮你想到了,试试shift + tab
,他会给你一个可以选择的类型列表~
有时候你正在写一个方法的时候发现。哎哟,这个变量最好是当作参数传递进来啊;要做成这么一件事,你必须把这个方法内部所有使用这个局部变量的地方替换,把所有调用这个函数的地方添加参数,繁琐至极!好了有了这个你可以随便玩了:
Cmd + Alt + P
Ctrl + Alt + P
当然,如果你想保留原来的方法,只是搞一个参数不同的方法(重载)出来,可以在弹出的那个对话框里面打勾。
写代码的时候是否会发现不知不觉的这个方法已经太长了,适合分解然后提取出一个个子方法;或者是重构的时候看到一个一两千的函数,你是不是头都大了?一般情况下,我们都是把要提取的代码copy出来,然后写一个方法(还要什么该死的方法签名)然后把这段代码复制进来;其实这个过程是机械的,完全可以由IDE完成:
Cmd + Alt + M
Ctrl + Alt + M
如果想改变方法的签名,在对话框里面选择你需要的就可以了~
上面提到了三个快捷键其实是比较类似的,如何记忆呢?
- 首先组合键都是
Cmd/Ctrl + Alt
- 然后提取变量Variable=V,参数Parameters=P,方法Method=M
好了学会了上面那几个快捷键,万一玩high了,比如提取了太多的方法,想“弄回去”,该怎么办呢?这个操作叫他Inline..
:
Cmd + Alt + N
Ctrl + Alt + M
上面那个图只是参考,其实不仅可以作用于变量,还可以是方法/参数,个人觉得方法inline比较有用。
静态类型语言重构起来相对容易的,但是通常修改一个地方会牵扯到很多别的地方,我们只有一处一处找到这些编译错误然后手动修复。其实有好多工作是可以自动完成的,比如删除某个方法;先确认有没有人调用(Alt + F7),没有的话把方法体删了,有的话去看看调用的地方再决定怎么办。
但是重构的操作实在是太多了!我们没有办法也没有必要一个个记住,知道这个快捷键即可,我叫他万能重构键:
Ctrl + T
Ctrl + Alt + Shift + T
在Win/Linux上可以考虑把这个快捷键改一下键,一下按四个键臣妾很难做到啊。。
这个重构菜单每一个功能都可以自己去尝试一下,使用之后不好用你来打我。
说实话,想不出一个比较好的翻译 :P 干脆使用英文吧。
有没有这样的场景:你在Android Studio打开了一个图片文件(或者别的文件),想在资源浏览器里面查看这图片;在Eclipse里面我想大部分的人是Alt + Enter
进入文件属性复制地址,然后在系统资源管理器里面打开;或者装一个EasyExplore插件。在Android Studio里面,这是内建支持的!而且还不止如此!比如你想看看某个文件在包的哪个目录,通常是不是点击Project View上面的那个小圆坐标;用这个快捷键鼠标就能搞定。
快捷键: Alt + F1
弹出的菜单有一系列的选项;按对应的数字就可以选择;其他的菜单有什么功能可以自己尝试一下。
这个功能应该很多人都知道;但还是说明一下,因为跟下面两个功能跟这个结合起来才有威力。这个功能太强大了,自己去按几遍就能想到很多使用场景了;我相信有了这个功能,你使用鼠标的机会会少很多。
Alt + up/down
ctrl + w / ctrl + shift + w
如果你想把一段代码使用if
语句包起来;又或者使用try
包围一段可能有运行时异常的代码,你会怎么干?
首先用光标定位到代码块开头,写上 try {
然后,光标代码块末尾加上} catch (XXXRuntimeException e) {// todo}
?可以试试这个快捷键。
cmd + alt + t
ctrl + alt + t
可以使用上面的拓展选择选择你需要的代码块,然后使用这个功能Surround With;如果你什么都不选择的话,那么默认选择的是光标所在行。
这个功能跟上面提到的是一对,有了Surround With自然就有Unsurround With;使用情况没有上面那个那么多,但是好歹一对,一起介绍吧。
有时候看代码的时候,看到某个变量想知道哪里使用了它;你还在用肉眼查找吗?或者你杀鸡用牛刀Find Usgae
?其实你的需求就是把这个变量全部给我打个标签,我想直观的知道它在哪。
cmd + shift + F7
ctrl + shift + F7
这个键功能远不止这个!
return
或者throw
,那么会把这个方法所有的返回点高亮出来!extends
或者implements
会把这个类Override的方法高亮出来import
会把使用的地方显示出来如果不想要高亮了,按下Esc就行。
在看源码的时候,你还是使用alt + F7
和ctrl + 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 Breakpoint
, Exception Breakpoint
呢?还有高大上的 Field Watchpoint
?
你有关注过Android Studio旁边断点的区别吗?比如上图三个断点有什么不同?且听我一一道来。
一般来说我们有两种办法调试一个debuggable的apk;其一是下好断点,然后用debug模式编译安装这个app;其二是 attach process
,在Android Studio里面就是这么一个对话框:
第二种方法比较常用,我们可以在启动apk之后,直接下断点,然后attach process到制定进程,条件触发之后就可以直接进入调试模式。
其他的一些单步执行,step into
, step out
, force step into
等就不提了;基本的跟踪手段。
还是提一下,下断点最简单的办法,是在代码编辑器的左侧,行号右边鼠标点击一下即可。
这个功能非常实用,可以在断点处直接进入一个求值环境,在这里你可以执行任何你感兴趣的表达式;如下图:
比如在断点处有一个对象object
,如果你要查看它的某个属性很简单,在Debug窗口就能看到,但是如果你想要执行它的某个方法看看结果是什么呢?借助这个可以实现。当然它的功能远不止这么多,相当于直接进入了一个 REPL
环境,非常实用。忘了说了,快捷键 Alt + F8
:P
假设你的断点在一个列表的循环里面,可是你只对这个列表的某一个元素感兴趣,只想在遇到这个元素的时候才断下来;你是一直人肉 F9
直到满足条件吗?条件断点就是满足这种需求的,顾名思义,在特定条件下的断点。使用起来也非常简单,在你的断点上鼠标右键会出现一个小窗口,写上条件即可。
很多时候我们调试的时候更多的是打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以经常做的事情就是在代码里面添加日志信息,输出函数参数,返回信息,输出我们感兴趣的变量信息等。
但是这么做一个问题就是,我们添加了日志代码需要重新编译;在没有 Instant Run
之前的黑暗时代这么做是非常痛苦的,每次编译少则几十秒,多则几分钟;这样无意义的等待简直就是折磨;其实,除了热部署工具,我们还可以使用日志断点解决这个问题。
首先我们在想要输出信息的地方下一个断点;然后右键这个断点,在出现的设置框里面把这个断点的 suspend
属性设置为 False
,这样虽然叫做“断点”,但是并不会真正断下来;然后,我们在 log message
里面填上我们想要输出的日志信息。如下图(注意标红位置):
这样,每次代码执行到这个断点的位置,这个可爱的断点并不会使我们的程序停下来,而是输出我们告诉它的日志信息,然后继续执行;非常方便。
传统的调试方式是以行为单位的,所谓单步调试;但是很多时候我们关心的是某个函数的参数,返回值;(回想一下我们使用日志的时候打印的最多的信息难道不是函数的参数和返回值吗?)使用方法断点,我们可以在函数级别进行调试;如果经常跳进跳出函数或者只对某个函数的参数感兴趣,这种类型的断点非常实用。具体使用方法有两种方式;最简单的是在你感兴趣的方法头那一行打上断点,这时候你会发现断点图标有点不一样,这就是方法断点了,如下图:
另外一种方式是通过断点设置窗口, 后面介绍。
在有些情况下,我们只对某些特定的异常感兴趣,或者我们只对异常感兴趣;我们希望只要程序发生异常程序就能断下来;这好像保存现场一样,只要发生命案了(异常),第一时间保存现场,这样什么指纹之类的线索就会清晰很多,坏蛋就算想逃也是插翅难飞啊。
Android Studio给了我们这个能力!那就是异常断点!可以在特定异常发生的时候,直接让整个程序断下来;如果你对所有异常感兴趣,直接 Throwable
即可。
具体做法是,进入 Run -> View BreakPoints
或者使用快捷键打开断点设置窗口;如下图:
点击左上角的 ➕ ,会出现一个选择框;选择Exception Breakpoint
;然后会出现一个对话框,选择你感兴趣的异常:
在上面我们添加异常断点的时候,点击加号的时候,有四个选项;第一个就是我们前面所说的第二种方法断点的添加方式,第三个是异常断点,那么第二个 Field WatchPoint 是干什么的呢?
有没有这样一种场景:你发现某个值莫名其妙滴不知道什么时候被谁给修改了,罪魁祸首是谁?Java虽然是值传递,但是引用也可以是值;对象全部存放在堆上面,而堆是被所有线程共享的,因此在非常复杂的场景下,你根本不知道这些共享变量被谁修改了,这样非常危险;在多线程环境下,不变性是一个很重要的特性,我们看到高并发的语言诸如 Erlang
, Scala
对于这种不变性都有着某种程度的支持。
好吧,扯远了;那么我们怎么揪出这个修改我们值的捣蛋鬼呢?那就是这个 Field WatchPoint的功能了;使用它我们可以在某个Field被访问或者修改的时候让程序断下来;完美解决这个问题。
下断点的方式和方法断点类似,也有两种;第一种是直接在某个字段的声明处下断点,这时候断点图标会改变,如下图:
右键这个断点我们可以进行一些设置,比如默认是被修改的时候断下来,你也可以改为每次访问这个字段就断下来。
另外一种方式是 Run -> View BreakPoint
打开设置,与异常断点类似。
上面介绍了这么多给力的功能,其实还有很多细节;打开断点设置窗口(Run -> View Breakpoint`):
android-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化,对于我来说是开发必备,本人也对此插件进行了一些优化,个人感觉用起来更爽 ,博客地址:ButterknifePlugin
注意:需要先导入butterknife包才能使用
可根据json数据快速生成java实体类
可以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K
顾名思义,就是帮你一起找bug的,当然Android Studio也提供了代码审查的功能(Analyze-Inspect Code...)
使用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