OS: Mac OS
IDE:Android | Eclipse
構(gòu)建工具: Gradle
前言
每個(gè)團(tuán)隊(duì)中不同的程序員的技能熟練度和自我約束未必大致相當(dāng),如果沒有一定的規(guī)范對(duì)每個(gè)人進(jìn)行約束,那么在團(tuán)隊(duì)合作之中難免會(huì)出現(xiàn)一些沒必要的麻煩。而且像這種基礎(chǔ)無聊的東西也沒必要通過人工進(jìn)行 review,而且能做 review 的人級(jí)別只能是項(xiàng)目中職位最高的,所以這是一種資源浪費(fèi),職位低了,又不好說,說了人家說不定還不樂意,覺得你挑戰(zhàn)他的權(quán)威,說多了都是淚。
所以最好的方法就是在開發(fā)過程中依賴編譯器自動(dòng)檢測,然后在運(yùn)行的時(shí)候進(jìn)行全局的代碼檢查,不能通過代碼規(guī)范的話就直接安裝失敗。失敗的case會(huì)提供詳細(xì)的解釋,且提供快速修復(fù)功能。
CheckStyle就是一個(gè)用以制定并且檢查規(guī)范的庫 or 插件。
下面我們使用 Android Studio 安裝 Checkstyle 插件,
安裝 CheckStyle
- 打開Android Studio -> Preferences -> Plugins -> 搜索 CheckStyle ->點(diǎn)擊安裝,安裝完保存并且選擇重啟 AS
- 重啟后就可以在 Android Studio 底部工具欄看到CheckStyle工具了
-
打開 CheckStyle 面板,選擇一個(gè)規(guī)范,這里我們選擇 Google Checks,即為 Google 的規(guī)范,詳見下圖
圖片.png -
打開某一個(gè) java 類,然后在 點(diǎn)擊 CheckStyle 面板左上角的綠色三角箭頭,即可執(zhí)行代碼檢測,詳見下圖
Snip20180525_17.png
這樣我們就安裝好了 CheckStyle 并且初步能使用了,突然想來句全劇終,哈哈。
定制自己的代碼規(guī)范
從上圖中我們可以看到 GoogleCheck 的規(guī)范中關(guān)于行前縮進(jìn)是2的倍數(shù),而AS 默認(rèn)還有大多數(shù)我們?cè)?Github 上看到的庫的行前縮進(jìn)都是4個(gè)空格的倍數(shù),所以這里我們把規(guī)范改一改會(huì)合適點(diǎn),CheckStyle當(dāng)然支持自定義規(guī)范了,步驟如下
- 首先我們?nèi)ハ螺d一份GoogleCheck,在此基礎(chǔ)上進(jìn)行修改
- 將下載完的 xml 文件拷貝到項(xiàng)目中,我是放在
rootPath/config/google_checks.xml處 - 打開
google_checks.xml,找到Indentation,將子節(jié)點(diǎn)<property name="basicOffset" value="2"/>中的 value 值改為4 - Android Studio -> Preferences -> Other Settings -> CheckStyle -> 點(diǎn)擊 Configure File 底部的
+按鈕添加我們放在工程中的google_checks.xml文件,并且保存設(shè)置,結(jié)果如下圖
Snip20180525_18.png - 重新打開Android Studio 底部工具欄的 CheckStyle 面板,選中
MangoCheck,并且執(zhí)行,可以看到已經(jīng)沒有報(bào)縮進(jìn)4個(gè)空格不符合規(guī)范的警告了,如下圖所示
Snip20180525_20.png
通過上面的步驟,我們已經(jīng)學(xué)會(huì)了如何制定我們自己的代碼規(guī)范,并且集成到開發(fā)工具中了,如果想要了解更多的規(guī)范設(shè)置,可以看 CheckStyle 的文檔,文檔每個(gè)屬性都提供了實(shí)例。
實(shí)時(shí)檢測代碼規(guī)范
通過上兩節(jié)的內(nèi)容,我們已經(jīng)學(xué)會(huì)了如何使用 CheckStyle對(duì)代碼進(jìn)行自定義的規(guī)范檢查,但每次都要手動(dòng)進(jìn)行檢查是在多余和無聊,那么我們?nèi)绾芜M(jìn)行實(shí)時(shí)的代碼檢查呢?本節(jié)將對(duì)此進(jìn)行介紹
- 打開 Android Studio -> Preferences -> Editor -> Code Style -> 點(diǎn)擊 Scheme右側(cè)按鈕 -> Import Scheme -> CheckStyle Configuration,選中我們的
google_checks.xml,點(diǎn)擊保存,后會(huì)告訴我們我們導(dǎo)入的配置名字為Default Copy詳見下圖
Snip20180525_22.png

-
我們將名字改成 MangoCheck,點(diǎn)擊保存,如下圖所示
Snip20180525_24.png -
打開我們的 Java 文件,可以看到在 AS 右側(cè)工具欄會(huì)看到幾個(gè)警告,光標(biāo)移動(dòng)上去之后就會(huì)出現(xiàn)格式錯(cuò)誤的說明,這就表明了我們現(xiàn)在可以實(shí)時(shí)檢測代碼規(guī)范了,詳見下圖
Snip20180525_25.png 還記得我們?cè)趺锤袷交a嗎?沒錯(cuò),通過上面步驟的設(shè)置之后我們現(xiàn)在可以通過快捷鍵格式化代碼成我們規(guī)定的樣子了,在 Mac OS上快捷鍵是
CMD + Alt + L,當(dāng)然這只能對(duì)縮進(jìn)和換行進(jìn)行格式化,像命名不符合規(guī)范之類的是做不到的。
警告經(jīng)常被忽略,只有錯(cuò)誤才醒目
相信我們?nèi)粘i_發(fā)中,不少小伙伴對(duì)于編譯器的警告都是不去處理的吧,所以我們要把警告變成錯(cuò)誤!
-
打開 google_checks.xml,將
severity改成error,詳見下圖
Snip20180525_27.png -
我們?cè)诨氐轿覀兊?Java 文件中,可以看到拋出異常了,詳見下圖,紅色就顯得醒目了吧?
Snip20180525_28.png
格式不符合規(guī)范就不給安裝
通過上面幾個(gè)小節(jié),我們已經(jīng)完成了格式實(shí)時(shí)檢測和快速修復(fù)了,而且我們還修改了格式報(bào)錯(cuò)的級(jí)別,變成 error,但其實(shí)這并不影響我們把有問題的代碼執(zhí)行并且安裝,所以這還是不夠的,接下來本節(jié)介紹一下如何讓格式不符合規(guī)范的代碼無法運(yùn)行。
將 google_checks.xml 中的
severity改成error配合Gradle,我們對(duì)app 下面的 build.gradle 進(jìn)行改造,代碼如下
apply plugin: 'checkstyle'
...
task myCheckstyle(type: Checkstyle) {
source 'src/main/java'
ignoreFailures false //是否忽略失敗,默認(rèn)就是false,如果設(shè)置為 true,則就算有失敗也可以成功安裝
include '**/*.java'
classpath = files()
}
//必須指定 check 文件,和工具版本,工具版本記得用最高版本,否則可能無法解析某些 token
checkstyle {
configFile rootProject.file('config/google_checks.xml')
toolVersion = '8.10'
}
//check是一個(gè) Task,程序build 和 run 的時(shí)候會(huì)執(zhí)行該任務(wù),我們讓它依賴我們的 checkStyle Task,
//配合上面設(shè)置的報(bào)錯(cuò)級(jí)別為 error,即可實(shí)現(xiàn)有格式不符合規(guī)范就不給安裝的目的
check.dependsOn('myCheckstyle')
-
運(yùn)行程序,可以看到拋出錯(cuò)誤異常了,如下圖,并且告訴我們它把異常信息放在了工程的 build 目錄下
圖片.png
- 如果出現(xiàn)異常,我們可以通過打開 build 下面那個(gè) html 去查看,更加省事的就是打開Android Studio 底部工具欄的 CheckStyle面板,運(yùn)行就是了。
如果有小伙伴不聽話咋辦
通過上面的幾個(gè)小節(jié),我們終于實(shí)現(xiàn)了不符合規(guī)范就不給運(yùn)行的目的,但是,但是如果有些 大佬 就是不遵循我們的協(xié)議咋辦?那么就給 svn、git 設(shè)置 pre_commit 的腳本吧,一旦發(fā)現(xiàn)提交的代碼不符合規(guī)范,就 refuse 便是。這里后面再展開,暫時(shí)沒時(shí)間去搞這個(gè)。
CheckStyle 和 Gradle 的配合使用是很強(qiáng)大的,上面的幾個(gè)小節(jié)只是列了一個(gè)完整的流程,其實(shí)還有很多細(xì)節(jié)可以私人訂制,有興趣的小伙伴可以自行上 Gradle 官網(wǎng)和 CheckStyle官網(wǎng)學(xué)習(xí)。
另外 阿里巴巴也提供了一個(gè)強(qiáng)大的Java 開發(fā)手冊(cè)及插件,感興趣的小伙伴可以去學(xué)習(xí)一下。









