Android 代码规范神器 :CheckStyle使用全面解析

本文主要介绍以下内容:

(1)CheckStyle详细使用

(2)如何定制专属CheckStyle检查规则

(3)如何定制专属CodeStyle

(4)如何有效的FormatCode

一、CheckStyle 使用


       CheckStyle 可以通过插件和gradle脚本两种方式来实现,对于gradle脚本而言,只需要配置好CheckStyle 的gradle脚本,运行gradle task 即可输出扫描结果(html/xml两种格式),因此,本文将重点介绍CheckStyle-IDE插件使用。

CheckStyle插件使用步骤如下:

(1)安装CheckStyle-IDE插件

(2)添加检查规则文件

添加CheckStyle检查规则文件

(3)CheckStyle-IDE 插件使用

       在AS上打开CheckStyle 插件操作面板,面板内容如下图所示,主要包括:检查规则选择(自带一个默认规则)、扫描范围选择 (current file、Module、project、files Chaged (这个很重要))、刷新等操作

checkStyle 操作面板

(4)CheckStyle扫描结果

CheckStyle扫描结果

(5)根据CheckStyle扫描结果对应修改

      重复(3)~(5)修改完即可


CheckStyle gradle脚本配置如下:

CheckStyle脚本配置主要包括:CheckStyle 版本、配置检查规则文件、设定CheckStyle检查范围、CheckStyle扫描结果输出方式等等。

备注 :记得添加 classpath 'com.puppycrawl.tools:checkstyle:7.1.2' (不添加,高版本gradle 会有问题)

checkStyle gradle脚本配置

二、如何定制专属CheckStyle检查规则


       CheckStyle不管是插件方式还是脚本方式,使用都是相当方便快捷的,而难点在于如何定制专属于我们项目的CheckStyle检查规则。

定制CheckStyle规则大致思路:

通过对Google 提供的checkStyle检查规则修改完善,打造出属于自己的检查规则

地址:Google checkStyle 检查规则

(1)全面解析CheckStyle 检查规则

        CheckStyle检查规则是基于XML配置文件的,主要通过XML文件中的module对检查规则进行配置。在XML文件中,被指定的module,都将被对应规则检查;

       具体对应检查项及规则可以参考:CheckStyle 官网

(2)全面解析检查规则文件checkStyle.xml

在XML中主要由module 、property、message等节点构成:

最好举个例子说明

(1)module节点

module 主要是指检查项,如MethodName (检查方法命名)

module中有两个比较重要的节点,它们分别是Checker(checkStyle配置文件的根节点,必须存在)、TreeWalker(树遍历器),TreeWalker会自动去检查指定范围内的每一个java源文件,TreeWalker内部会定义很多module。

module的根节点是Checker,一定要有;

(2)property节点

对应module 检查项中具体检查属性,如果使用默认值,property节点可以省略;

(3)message节点

checkStyle检查出来,是否打印出message消息,message节点可以省略

(3)如何添加过滤能力

       根据(1)~(2),定制好了属于自己的CheckStyle检查规则,然后使用CheckStyle-IDE进行扫描后,发现协议文件(通过平台工具将jce协议文件转化成java代码)被检查出来很多问题,那怎么才能让CheckStyle 不对这部分代码进行规则检查了。

解决办法:

在定制好的checkStyle.xml文件中,添加一个名为SuppressionFilter的moudle,在过滤规则文件suppressions.xml中添加相应的过滤规则。

在checkStyle.xml 中添加 SuppressionFilter

在checkStyle.xml文件中添加过滤文件

suppressions.xml 为过滤规则相关文件:

目前可添加的过滤能力有:

(1)对某个java文件,过滤某项或多项规则检查

(2)对某个java文件,过滤所有文件检查

(3)对某个包下的所有java文件,过滤某项或多项规则检查

(4)对某个包下的所有java文件,过滤所有文件检查

     对协议包进行过滤检查是相当有用的

suppressisons.xml文件内容

       是否还能将过滤能力加强了,如对某个java文件中的某段代码进行某个规则过滤了 ?

解决办法肯定有的,目前通过suppressions.xml文件确实无能为力了,但是我们却可以通过注解方式来达到上述目的。

使用@SuppressWarningFilter注解来过滤某些检查项:

1)在checkStyle.xml规则文件中添加 @SuppressWarningFilter注解能力

添加SuppressWarningFilter注解能力

2)实例

局部变量命名违反规则,不能使用单个字母进行命名

使用SuppressWarningsFilter注解前

3)使用@SuppressWarningFilter注解后

       使用@SuppressWarningFilter("checkstyle:LocalVariableName")注解后,CheckStyle下次扫描时,会将其过滤。

使用SuppressWarningsFilter注解后

(4)没事多看看CheckStyle 源码

       有人可能抱怨到,Google 的checkStyle.xml规则太多,对照CheckStyle官网说明有时也找半天,看的也不是很明白,那有没有什么办法可以了解更快更全了?

      有,那就直接看CheckStyle 的源码即可,地址:Github CheckStyle源码 地址

如,现在想查找CheckStyle 关于缩进(Indentation)的规则,直接上在上述地址搜索框搜索:Indetation :

checkstyle/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/IndentationCheck.java

Indentation(注释很详细):

Indentation check 对应属性
默认缩进

      是不是一目了然,没事多看看源码,肯定没错的。

三、如何定制专属CodeStyle


为什么要定制codeStyle了?

一是保证与checkStyle.xml中规则保持一致性;

二是保证项目组成员使用同样一份codeStyle ,风格一致性 ;

最终输出自定义Code Style 文件:radio_code_style.xml

Code style 导入导出 :

Code Style 配置面板

3.1 Code Style-java 配置

CodeStyle java 主要包括以下几个部分:

(1)Tabs and Indents (Tab 和缩进)

         Tab和缩进使用默认就可以

(2)Spaces (空格)

        Spaces 主要包括圆括号、操作符 、关键字、大括号等左右空格问题,使用默认配置即可。

Spaces 配置项

(3)Wrapping and Braces (大括号及其包裹内容)

      支持自动换行(超过line_max =200 ,后面将会介绍);

     if,while 等关键字自动带上大括号 (format时进行);

     builder模式 "."号自动对齐 等等配置

Wrapping and Braces

(4)Blank Lines

       使用默认配置

(5)Java Doc 默认

Java Doc

(6)Imports

根据需要,调整Imports 顺序

Imports

(7)Arrangement 排序规则 (默认)

Arrangement

(8)Code Generation

在Field 前面添加 m前缀 ,在 static field 前面添加s前缀

Code Generation

另外,我们还可以在CodeStyle中配置 Line_max

Line_max=200

       每行不超过200字符


       一眼看过去,里面配置项很多,对应的含义也不是很明白,那就去看看官方code_style_java文档。

如:Wrapping options选项 含义

Wrapping options选项 含义

3.2 其他比较实用的设置(不在Code Style 范围内)

(1)Overly long method (方法过长)

Overly long method

默认情况:Severty(严重程度)为Waning,默认行数限制30

可以修改提示对应的Severty级别和行数 ,与Check Style 保持一致

(2)自动换行

自动换行

(3)自动清除 unused import

在开发过程当中,经常碰到无用的Import需要清理或者新增类需要添加Import,这时候要么遗忘删除,导致产生无用的代码行,或者需要使用快捷键新增,非常不方便,Android Studio自身就提供自动处理功能。

自动清除 unused import

四、如何有效的Format Code


      在前面第二、三部分 我们已经完成了CheckStyle检查规则和CodeStyle的定制,考虑到之前组内同事使用了不同的codeStyle.xml,所以在修改CheckStyle扫描问题前,需要对项目代码进行整体format(使用新的codeStyle.xml),万能的AS提供了这种能力,即Reformat code。

Reformat code 功能如下图所示:

(1)Options 优化项 (默认都没有选择)

主要包括 imports 、rearrange、VCS 等优化

Reformat code (全局)

(2)Filters 功能

      主要包括,范围和文件类型

(3)reformat code (current file)

reformat code (current file)

(4)VCS 前配置自动执行 (暂时不需要,我们需要Code 前)

commit 前需要进行的相关操作

(5)指出Reformat code 的Scope 范围选择功能

  自定义Scope

自定义Scope

       为什么需要自定义Scope 范围了,如有些文件,协议类 (不在Check Style 扫描检查范围内),不需要再对其Reformat code。

     但是必须指出的是,对整个项目Reformat Code 次数并不多,因此不需要对其进行范围设置。

     因此,对整个项目进行format的时候,选择 Scope = Projects Files ,然后回滚一下 协议包下面的修改即可。


至此,关于CheckStyle 的相关内容解析完了,如有错误地方或不足之处,欢迎指出,谢谢^_^!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容