在Git hook上配置Android Lint和Checkstyle

Enable git-hook

在project的.git/hooks的目錄下远豺,可以看到以.sample結(jié)尾的各種git hook shell文件肩祥,加.sample后綴的原因是讓當(dāng)前project的git hooks默認(rèn)disable,如果去掉sample后綴砚哆,則對應(yīng)的hook生效独撇。比如去掉pre-commit.sample的后綴,則sample的pre-commit里面的內(nèi)容就會在git commit之前執(zhí)行躁锁,如果shell最后的?不等于0纷铣,則說明當(dāng)前pre-commit運行出錯(如果配置了單元測試,有測試failed后战转,?就不等于0)搜立,git commit就不會執(zhí)行。

那么如何配置git-hook呢槐秧?

  • 方法一(推薦啄踊,自動配置):可以通過在Android里面添加task的dependsOn關(guān)系將忧设,project中的hooks/pre-xxx拷貝到.git/hooks下:


    image.png

    因為不想針對單獨的subproject的build.gradle進(jìn)行配置,所以放在了rootProject下:


    image.png

    當(dāng)然最前面還要apply下:apply from: "${rootProject.projectDir}/gradle/git-hooks.gradle"颠通,至于為什么在subproject的afterEvaluate做址晕,是因為preBuild這些subProject的task是在subproject的evaluate后,才獲取得到顿锰。當(dāng)然也不能直接寫preBuild dependson installGitHooks谨垃,preBuild應(yīng)該是在java/android plugin中引入的(而這個一般在subproject中才apply)
  • 方法二:在git版本大于2.9的時候,在project的根目錄新建一個hooks目錄硼控,專門用來放置git-hooks的文件乘客,比如新添加一個pre-commit shell文件,內(nèi)容是運行測試淀歇,如:./gradlew test。使用config配置的命令:git config core.hooksPath hooks匈织,hooks是指向project新建的目錄hooks浪默。這時候運行g(shù)it commit就會先去跑測試。
  • 方法三:使用symlink建一個軟鏈接到默認(rèn)的.git/hooks下缀匕,同樣的在project新建一個hooks目錄纳决,下面放置pre-commit文件運行測試, 然后在.git/hooks目錄下乡小,將pre-commit.sample的后綴去掉阔加,這時候沒添加鏈接前,git commit會運行sample里面的內(nèi)容满钟,但是通過命名:ln -s -f ../../hooks/pre-commit .git/hooks/pre-commit胜榔,就可以找到project新建的hooks下自定義的pre-commit內(nèi)容。
  • 方法四:通過使用git的tempalte directory湃番,在clone和init的時候會進(jìn)行默認(rèn)的拷貝夭织。具體實現(xiàn)大家可以下來動手嘗試。
    好的吠撮,說完這樣配置git-hooks之后尊惰,再看下這樣配置checkstyle和Android lint

git-hook配置Android checkstyle

其實配置checkstyle很簡單,因為如果checkstyle檢查有issue時候泥兰,它的$?就是不等于0弄屡,成功則等于0,所以直接在pre-commit里面添加:

./gradlew ${project}:checkstyle
# 如果不想輸出顯示的話鞋诗,運行
./gradlew ${project}:checkstyle >/dev/null

git-hook配置Android lint

配置Android的lint在我測試的project稍微麻煩下膀捷,因為被測的project,在運行l(wèi)int的時候削彬,總是被一些非lint的錯誤中斷担孔,所以在build.gradle中添加了以下配置:

lintOptions {
    abortOnError false
}

在配置了以下的選項后江锨,表示即使在運行l(wèi)int遇到錯誤也不中斷。lint運行完成之后不管是否有issue糕篇,$?都是0(成功)啄育。

所以暫時用shell去gou一把:

#!/bin/sh

red='\033[0;31m'
green='\033[0;32m'
noColor='\033[0m'

# for XXX and YYY
projectDir=$(git rev-parse --show-toplevel)
lintProjects=("XXX" "YYY")

for project in ${lintProjects[@]}
do
    # Android lint check
    echo "-----------------Starting run android lint for ${project}-----------------"
    lintReportPath="${project}/build/reports/lint-results.html"
   
    for issueCount in $(./gradlew ${project}:lint 2>/dev/null | grep "Ran lint on variant" | egrep -o '[0-9]+')
    do 
        if [ $issueCount -ne 0 ]
        then
            echo "${red}Failed, ${project} project has ${issueCount} lint issues!${noColor}"
            echo "Please refer file://${projectDir}/${lintReportPath}"
            exit 1
        fi
    done
    echo "${green}Successed, no android lint issues found for ${project}${noColor}\n"

    # Checkstyle
    echo "-----------------Starting run android checkstyle for ${project}-----------------"
    checkstylePath="${project}/build/reports/checkstyle/checkstyle.html"
    
    ./gradlew ${project}:checkstyle >/dev/null
    checkstyleStatus=$?
    if [ $checkstyleStatus -ne 0 ]
    then
        exit $checkstyleStatus
    fi
    echo "${green}Successed, no android checkstyle issues found for ${project}${noColor}\n\n"
done

好了,上面的配置就是Andorid lint和checkstyle如何加到git-hooks里面拌消。
如果想了解如何在Android上配置lint和checkstyle挑豌,戳這里Android Lint & Checkstyle

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市墩崩,隨后出現(xiàn)的幾起案子氓英,更是在濱河造成了極大的恐慌,老刑警劉巖鹦筹,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铝阐,死亡現(xiàn)場離奇詭異,居然都是意外死亡铐拐,警方通過查閱死者的電腦和手機(jī)徘键,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遍蟋,“玉大人吹害,你說我怎么就攤上這事⌒榍啵” “怎么了它呀?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棒厘。 經(jīng)常有香客問我纵穿,道長,這世上最難降的妖魔是什么奢人? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任政恍,我火速辦了婚禮,結(jié)果婚禮上达传,老公的妹妹穿的比我還像新娘篙耗。我一直安慰自己,他們只是感情好宪赶,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布宗弯。 她就那樣靜靜地躺著,像睡著了一般搂妻。 火紅的嫁衣襯著肌膚如雪蒙保。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天欲主,我揣著相機(jī)與錄音邓厕,去河邊找鬼逝嚎。 笑死,一個胖子當(dāng)著我的面吹牛详恼,可吹牛的內(nèi)容都是我干的补君。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昧互,長吁一口氣:“原來是場噩夢啊……” “哼挽铁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敞掘,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤叽掘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玖雁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體更扁,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年赫冬,在試婚紗的時候發(fā)現(xiàn)自己被綠了浓镜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡面殖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哭廉,到底是詐尸還是另有隱情脊僚,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布遵绰,位于F島的核電站辽幌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏椿访。R本人自食惡果不足惜乌企,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望成玫。 院中可真熱鬧加酵,春花似錦、人聲如沸哭当。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钦勘。三九已至陋葡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彻采,已是汗流浹背腐缤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工捌归, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岭粤。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓惜索,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绍在。 傳聞我的和親對象是個殘疾皇子门扇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353