Android Studio高效开发技巧(持续更新)

1.1 常用快捷键

本文所述快捷键基于AS设置"Setting-Keymap"中选择"Eclipse"

操作 Window快捷键
删除当前行 Ctrl + D
复制当前行 Ctrl + Alt + ↓
全局改名 Shift +Alt + R
当前文件查找 Ctrl+ F
全局查找 Ctrl + H
查看引用 Ctrl + G
代码层级折叠 Ctrl + Shift + .
方法body折叠 Ctrl + .
格式化代码 Ctrl + Alt + L
局部变量提取为成员变量 Ctrl + Alt + F
优化当前类导包 Ctrl + Alt + O
从光标当前开始选择 Shift + 方向箭头
自动代码生成 Alt + Insert
Build Project Ctrl + B
Forward前进 Alt + →
Back后退 Alt + ←
注释当前行 Ctrl + /
注释块 Ctrl + Shift + /
包裹代码块 Shift + Alt + Z

可以在AS的设置中查看快捷键,快捷键支持自定义修改

快捷键设置

还可以根据键盘按键快速搜索,直接按住快捷键便可搜索

快捷键搜索

1.2 后缀代码补全

AS预定义了很多根据后缀名进行代码补全的规则,在设置Settings - Editor - General - Postfix Completion中可以查看已有规则,目前支持Java/Kotlin,但是不支持自定义和修改。

下面举几个栗子。

  • .var / .field - 快速定义局部变量/成员变量
  • .null / . nn - 判空/判非空
  • .if / .else - 快速写if表达式
  • .for / .fori / .forr - 循环遍历

1.3 常用Menu功能

  • 代码对比

debug的时候总有想把某个类的当前代码和历史某分支某提交的代码比较一下的需求,AS自带的git便提供了这样的功能。打开需要比较的类,然后在菜单栏选择VCS - Git - Compare with(或者来类文件里直接右键选择git再选Compare with),等待AS加载当前类的历史提交记录,之后选择某个提交记录进行对比便可。

AS还支持当前代码与剪贴板中代码进行对比,先复制需要比对的代码,然后选中类中需要被比对的部分,右键选择Compare with Clipboard


  • 代码折叠

业务逻辑复杂的情况下,类长度可能会很长,上下滚动看代码的时候会很累,这时候可以把无关代码折叠起来,代码看起来会更加清晰。在类文件中直接右键选择Folding - Collapse All把代码块全数折叠(包括变量声明、方法体、jdoc注释等),如下图

image.png

右键选择Folding - expend doc comments可以把jdoc注释打开,这样看方法定义会更清晰,其他折叠功能类似。


  • 从历史拷贝中粘贴

有时候为了研究一段代码的效率,改来改去,复制粘贴了若干次,后面发现之前的写法可能更好,想把代码找回来,但是靠Ctrl + Z快捷键返回已经回不去之前的代码了,这时候可以从历史拷贝中粘贴之前的代码。如下图

划重点!重启之后AS的历史拷贝记录会被清空,也就没法使用上述方式找回历史代码了。所以还是建议用//或/***/暂时注释关键的代码,这样便于后面找回。


  • 省电模式

省电模式顾名思义是为了电池续航时间更长,使用于笔记本电脑,开启之后AS会关闭一系列的耗电操作,包括错误突出显示和动态检查、自动弹出式代码完成和自动增量式后台编译等。这简直是喜欢在星巴克看代码的程序员们的福音。在菜单栏中选择File - Power Save Mode


1.4 常用配置

Live Templates 动态模板

AS自定义好了很多动态模板,使用单词缩写快速填充代码,比如使用“pfs”快速填充"public static final",使用"lwm"来快速填充android:layout_width="match_parent"等。使用范围涵盖Java/Kotlin/C++/xml/html/等绝大多数开发常用文件,用户可自定义新的动态模板,也可修改AS已自定义好的模板。先来个gif图感受下(修改局部变量为成员变量时用了快捷键)

在AS中已经预定义好了很多模板,使用范围包括Java/xml/C/C++/Kotlin等,如下图所示。

下面列举几个AS自定义好的模板。

  • psf / psfs / prsf - 常量定义
  • logd / logt - 快捷log输出
  • itar / ritar - 快捷数组遍历
  • iter - 快捷遍历(数组/Collection/Map均支持)
  • itli / itco - 快捷Collection遍历
  • lww / lhm - 快速填充布局代码

AS还支持自定义模板,下面举2个栗子。

  • 自定义简单模板

找到Live Templates中的plain分组,在这里添加简单模板,如下:

image.png

之后便可以使用psfb来快速填充public static final boolean

自定义类文件头描述

1)在Settings - Editor - Code Style - Live Templates中找到右侧的"+"号,点击选择Template Group然后自定义命名,比如"MyCustom"
2)选定刚才创建的模板分组MyCustom,再次点击右上角的"+"号然后选择Live Template,输入AbbreviationDescriptionTemplate Text(可以定义变量)

3)看到提示"No applicable contexts yet.",点击旁边的Define,选定作用域

4)选定Edit variables,选择AS自带方法为变量赋值,赋值完毕之后点击确定,之后就可以在文件中实践检验了

给个效果gif图

author.gif

这里$USER$默认取的是Windows账号里的username,如果想要修改,可以在AS安装目录\bin\studio64.exe.vmoptions加入(32位的电脑则修改studio.exe.vmoptions)

-Duser.name=[your name]

  • 超字符自动换行

一行代码如果太长,可读性就会变得不太友好,AS中提供了超过多少字符之后自动换行的设置。比如设置一行超过120字符后自动换行,如下操作。

Settings - Editor - Code Style - Java - Wrapping and Braces中,将Hard wrap at更改为120,
Ensure right margin is not exceeded勾选上。

设置完毕后,使用格式化快捷键(Ctrl + Alt + L)便可使用,自动换行方便,但是有时候不太美观,建议还是手动换行。


  • AS虚拟机设置

AS的虚拟机支持参数设定修改,在其安装目录下的\bin\studio64.exe.vmoptions下是其官方默认配置,如下图

这里我们只关注对编译运行影响较大的两个参数,-Xms,-Xmx、

  • -xms JVM启动的起始堆内存,用于分配给对象的内存
  • -Xmx AS使用的最大堆内存,可以根据电脑性能设置,如16g的电脑可设置4g,8g电脑设置2g

划重点!不建议直接修改\bin\studio64.exe.vmoptions文件,一旦修改出错AS会无法启动,非要修改时请注意备份。最合适的操作是在菜单栏里选择Help - Edit Custom VM Options,创建新的vmoptions文件(一般位于系统盘:\Users\用户名.AndroidStudio3.1\config下)然后再修改,AS运行时会自动把修改内容合并到\bin\studio64.exe.vmoptions中,这样修改内容就生效了,且一旦修改出现问题,直接把.AndroidStudio3.1\config下的vmoptions文件删除即可。

此外,AS的参数配置还可以通过修改\bin\idea.properties实现,但凡修改请先做好备份,以便恢复原来的配置。
更多参数修改请参考:oracle官方vmoptions 参数说明


  • 方法排序

在Setting - Editor - Java - Arrangement
如果你总是调整自己写的方法,以使互相调用或功能相关的方法能靠近,可以这样设置。如第上一步的步骤,在标签中选择Arrangment,勾住Keep dependent methods together,后面可以自己选择是按广度排序还是按深度排序。


  • 干掉多余的tab和空格

Settings --> Editor --> Auto Import ,勾选 Optimize imports on the fly


  • 设置if{}代码块格式

每个程序员的码字习惯不尽相同,有些人喜欢

if (2 < 3) return;
else if (2 > 3) return;
else Log.d("BUG", "我是强迫症,我不喜欢方括号");

但也有人喜欢代码喜欢加{},因为这样显得更加清晰,而且if{}else{}的代码都被括起来了不易出错,就如下面的

if (2 < 3) {
    return;
} else if (2 > 3) {
    return;
} else {
    Log.d("BUG", "我也是强迫症,但我喜欢方括号");
}

AS默认是不强迫加方括号的,但为了满足各类强迫症患者,在设置里都提供了代码格式设置。如果需要代码强制加上方括号,在Setting - Editor - Java - Wrapping and Braces下找到'if()' statement,在Force braces选择Always,然后再用快捷键格式化代码,发现整个世界是那么美好!


  • Spelling单词拼写检查

AS支持英文单词拼写检查,绝大多数英文单词都支持,但总有些单词缩写没有支持到,或者工程用到了他国文字而AS本身不支持,这时候AS就会用下划波浪线标记出单词拼写有误,对于强迫症患者来讲这没法忍受。所幸AS支持拼写字典库,在Settings - Editor - Spelling中可以设置特殊的单词缩写,以及导入某国字典库。

  • 当AS标记一个单词为拼写错误时,可以用快捷键Alt+Enter选择save xxx to dictionary将新单词加入AS字典中,之后再出现同个单词AS便不会再报拼写错误。也可以在设置栏Accepted Words中点击"+"手动加入新单词。
  • 如果项目中需要支持到多国文字比如法语、丹麦语等特殊语种,可以在字典库下载相应字典导入,便可支持多国文字拼写检查,下面以法语为例

图中AS用波浪线标记单词拼写错误,是因为AS还不支持法语单词拼写检查,在字典库中下载French字典,下载完是个zip压缩包,解压,然后在AS的Settings - Editor - Spelling - Dictionary中点击"+"号选择刚解压好的文件夹,再看下刚才的文件,波浪下划线不见了。


  • 单词驼峰选择

使用快捷键"Ctrl + →" 和"Ctrl + ←"选择单词的时候,AS默认是不支持驼峰跳转的,如下图:

Settings - Editor - General - Smart Keys中勾选Use "CamelHumps" words,便可支持驼峰跳转了,修改单个单词时变得更加友好点。


  • 自动导包

Settings - Editor - General - Auto Import中将Optimize imports on the flyAdd unambiguous imports on the fly勾选上。勾选之后,当在类中使用新的类时会被自动导入,如下图

自动导包很方便,但有时很容易闹乌龙。比如类C在包A中被声明为默认包内引用,但包同时也存在同名类C,第三方调用者在使用类C时AS可能会误导包,开发者如果没及时发觉就会被小坑一把。


  • 关闭安全连接

有时候发现某些资源总是下载不回来,但是梯子搭了,配置也是正确的,那可能是AS的安全访问策略阻止了资源访问,可以先关闭之后下完资源再打开。
Setting - Appearance & Behavior - System Settings - Update - Use secure connection,将"√"勾选去掉。


  • 并行编译

gradle的任务支持并行执行,工程比较庞大的时候编译速度会比较慢,可以打开并行编译的开关,以获取更快的编译速度,但这需要更大的运行堆内存,对于性能好的机器(如内存16G)可以分配更大的堆内存。设置路径如下:
Settings - Build, Execution, Deployment - compiler - Compile independent modules in parallel

实际上在AS创建项目的时候在项目根目录下的gradle.properties文件就包含了并行编译和最大堆内存配置。


  • 显示实时内存

AS是吃内存大户,编译运行的时候如果内存不够用就会很慢很慢,可以在设置里打开实时内存使用来查看编译运行过程中到底使用了多少内存,然后再根据这个内存来调整AS的最大堆内存设置。
设置路径: Settings - Appearance - Window Options - Show memory indicator

点击内存占用显示区域还可回收部分内存。


  • 启动时选择最近打开的项目

AS关闭后下次启动会默认打开上次关闭前打开的项目(有多个则打开多个),但有些时候我们并不像这样,可以在Settings - Appearance & Behavior - System SettingsReopen last project on startup的勾选去掉。

去掉之后重启AS,再打开就可以选择最近打开过的项目。


  • 修改默认工程结构

写在最前面,Android Studio升级时会检测plugin文件夹下为文件内容,如果你修改了文件夹内文件内容,AS会无法升级,所以在修改前请务必备份原文件,在升级时恢复旧配置,升级完毕后再使用修改后的配置。否则升级时肯定会报错,如下

image.png

如果没备份,那只能用大招了,重新下载安装Android Studio,安装时选用旧配置即可。

首先了解下FreeMaker,一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。AS中用FreeMaker来自动生成一些文件,比如xml/Java/Android/Kotlin等,在新建文件的时候AS有引导页面给我们添加自定义参数,生成文件的步骤则是用了FreeMaker(其文件以.ftl作为后缀)。

AS已经定义好了标准Android项目的文件结构,新建项目StructureDemo1,添加Empty Activity命名为MainActivity,AS生成的结构如下(为了排版,请手动旋转图片查看)

AS新建工程的结构模板位于\plugins\android\lib\templates\gradle-projects下,可以看到有很多项目类型的标准结构。

如果能修改新建项目的结构,是不是可以考虑把项目标准通用的

  • build.gradle
  • colors.xml
  • string.xml
  • .gitignore

等文件加入标准结构中,如此开发时可减少许多重复工作。下面以构建标准Android项目结构为例,以下操作的文件夹均位于\AS安装根目录\plugins\android\lib\templates\gradle-projects下。

友情提示:请在修改前备份所修改文件,以备出问题时恢复原有状态

1)找到\NewAndroidProject\root\build.gradle.ftl,以管理员方式打开,然后加入如下配置

buildscript {
...
    ext {
        minSdkVersion = 21
        sdkVersion = 27
        compileSdkVersion = 28
        targetSdkVersion = 22
        buildToolsVersion = '28.0.0'
        junitVersion = '4.12'
        supportLibraryVersion = '28.0.0'
        androidEspressoVersion = '3.0.2'
        androidTestVersion = '1.0.2'
    }
}

2) 找到\NewAndroidProject\root\gradle.properties.ftl,以管理员方式打开,修改如下(-Xmx可以根据个人电脑性能配置)

3) 找到\NewAndroidProject\root\project_ignore,将通用的gitignore配置加入

4))找到\NewAndroidModule\recipe.xml.ftl,加入如下修改

5)可在\NewAndroidModule\root\res\values中的color.xml/strings.xml等文件加入项目通用的内容

6)关于buile.gradle生成规则的修改可在\NewAndroidModule\root下的shared_macros.ftlbuild.gradle.ftl,只要遵循FreeMaker的语法即可。

修改完后重启AS,之后再新建工程,验证修改正确与否。附上修改后的工程结构。


修改之后的工程结构
添加自定义颜色
根build.gradle配置
自定义gitingore文件

1.5 注释划分

AS提供了Structure视图查看类内部结构,当类比较复杂的时候寻找变量会变得比较麻烦,这时候可以使用关键字region进行注释划分,把功能相关的变量划分在一起显示,这样再用Structure查看类试图时会更加清晰明了。用法如下(可选中代码然后用快捷键Shift+Alt+Z唤出Surround With功能选择region)

// region 相机相关参数
    private final String TAG = getClass().getSimpleName();
    public RecogService.recogBinder mRecognizeBinder;
    private CameraTextureView mCameraTextureView;
    private int mPreviewWidth;
    private int mPreviewHeight;
// endregion

使用注释划分之后的Structure试图

你可能感兴趣的:(Android Studio高效开发技巧(持续更新))