OS: Mac OS
IDE:Android | Eclipse
构建工具: Gradle
前言
每个团队中不同的程序员的技能熟练度和自我约束未必大致相当,如果没有一定的规范对每个人进行约束,那么在团队合作之中难免会出现一些没必要的麻烦。而且像这种基础无聊的东西也没必要通过人工进行 review,而且能做 review 的人级别只能是项目中职位最高的,所以这是一种资源浪费,职位低了,又不好说,说了人家说不定还不乐意,觉得你挑战他的权威,说多了都是泪。
所以最好的方法就是在开发过程中依赖编译器自动检测,然后在运行的时候进行全局的代码检查,不能通过代码规范的话就直接安装失败。失败的case
会提供详细的解释,且提供快速修复功能。
CheckStyle就是一个用以制定并且检查规范的库 or 插件。
下面我们使用 Android Studio 安装 Checkstyle 插件,
安装 CheckStyle
- 打开Android Studio -> Preferences -> Plugins -> 搜索 CheckStyle ->点击安装,安装完保存并且选择重启 AS
- 重启后就可以在 Android Studio 底部工具栏看到CheckStyle工具了
-
打开 CheckStyle 面板,选择一个规范,这里我们选择 Google Checks,即为 Google 的规范,详见下图
-
打开某一个 java 类,然后在 点击 CheckStyle 面板左上角的绿色三角箭头,即可执行代码检测,详见下图
这样我们就安装好了 CheckStyle 并且初步能使用了,突然想来句全剧终,哈哈。
定制自己的代码规范
从上图中我们可以看到 GoogleCheck 的规范中关于行前缩进是2的倍数,而AS 默认还有大多数我们在 Github 上看到的库的行前缩进都是4个空格的倍数,所以这里我们把规范改一改会合适点,CheckStyle当然支持自定义规范了,步骤如下
- 首先我们去下载一份GoogleCheck,在此基础上进行修改
- 将下载完的 xml 文件拷贝到项目中,我是放在
rootPath/config/google_checks.xml
处 - 打开
google_checks.xml
,找到Indentation
,将子节点<property name="basicOffset" value="2"/>
中的 value 值改为4 - Android Studio -> Preferences -> Other Settings -> CheckStyle -> 点击 Configure File 底部的
+
按钮添加我们放在工程中的google_checks.xml
文件,并且保存设置,结果如下图
- 重新打开Android Studio 底部工具栏的 CheckStyle 面板,选中
MangoCheck
,并且执行,可以看到已经没有报缩进4个空格不符合规范的警告了,如下图所示
通过上面的步骤,我们已经学会了如何制定我们自己的代码规范,并且集成到开发工具中了,如果想要了解更多的规范设置,可以看 CheckStyle 的文档,文档每个属性都提供了实例。
实时检测代码规范
通过上两节的内容,我们已经学会了如何使用 CheckStyle对代码进行自定义的规范检查,但每次都要手动进行检查是在多余和无聊,那么我们如何进行实时的代码检查呢?本节将对此进行介绍
- 打开 Android Studio -> Preferences -> Editor -> Code Style -> 点击 Scheme右侧按钮 -> Import Scheme -> CheckStyle Configuration,选中我们的
google_checks.xml
,点击保存,后会告诉我们我们导入的配置名字为Default Copy
详见下图
-
我们将名字改成 MangoCheck,点击保存,如下图所示
-
打开我们的 Java 文件,可以看到在 AS 右侧工具栏会看到几个警告,光标移动上去之后就会出现格式错误的说明,这就表明了我们现在可以实时检测代码规范了,详见下图
还记得我们怎么格式化代码吗?没错,通过上面步骤的设置之后我们现在可以通过快捷键格式化代码成我们规定的样子了,在 Mac OS上快捷键是
CMD + Alt + L
,当然这只能对缩进和换行进行格式化,像命名不符合规范之类的是做不到的。
警告经常被忽略,只有错误才醒目
相信我们日常开发中,不少小伙伴对于编译器的警告都是不去处理的吧,所以我们要把警告变成错误!
-
打开 google_checks.xml,将
severity
改成error
,详见下图
-
我们在回到我们的 Java 文件中,可以看到抛出异常了,详见下图,红色就显得醒目了吧?
格式不符合规范就不给安装
通过上面几个小节,我们已经完成了格式实时检测和快速修复了,而且我们还修改了格式报错的级别,变成 error,但其实这并不影响我们把有问题的代码执行并且安装,所以这还是不够的,接下来本节介绍一下如何让格式不符合规范的代码无法运行。
将 google_checks.xml 中的
severity
改成error
配合Gradle,我们对app 下面的 build.gradle 进行改造,代码如下
apply plugin: 'checkstyle'
...
task myCheckstyle(type: Checkstyle) {
source 'src/main/java'
ignoreFailures false //是否忽略失败,默认就是false,如果设置为 true,则就算有失败也可以成功安装
include '**/*.java'
classpath = files()
}
//必须指定 check 文件,和工具版本,工具版本记得用最高版本,否则可能无法解析某些 token
checkstyle {
configFile rootProject.file('config/google_checks.xml')
toolVersion = '8.10'
}
//check是一个 Task,程序build 和 run 的时候会执行该任务,我们让它依赖我们的 checkStyle Task,
//配合上面设置的报错级别为 error,即可实现有格式不符合规范就不给安装的目的
check.dependsOn('myCheckstyle')
-
运行程序,可以看到抛出错误异常了,如下图,并且告诉我们它把异常信息放在了工程的 build 目录下
- 如果出现异常,我们可以通过打开 build 下面那个 html 去查看,更加省事的就是打开Android Studio 底部工具栏的 CheckStyle面板,运行就是了。
如果有小伙伴不听话咋办
通过上面的几个小节,我们终于实现了不符合规范就不给运行的目的,但是,但是如果有些 大佬 就是不遵循我们的协议咋办?那么就给 svn、git 设置 pre_commit 的脚本吧,一旦发现提交的代码不符合规范,就 refuse 便是。这里后面再展开,暂时没时间去搞这个。
CheckStyle 和 Gradle 的配合使用是很强大的,上面的几个小节只是列了一个完整的流程,其实还有很多细节可以私人订制,有兴趣的小伙伴可以自行上 Gradle 官网和 CheckStyle官网学习。
另外 阿里巴巴也提供了一个强大的Java 开发手册及插件,感兴趣的小伙伴可以去学习一下。