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閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容