Android studio配置及使用checkstyle

之前用sonar檢測代碼,發現很不方便,每次都需要手動檢測。然後就發現了checkstyle
CheckStyle的主要功能就是實時檢測,代碼的規範(Code Style)是否符合我們規定的一個模板,如代碼和括號之間沒有空格, 類中導入的包沒有使用等,當發現這些不符合這些規範時,它就報一個警告或者錯誤等提示,導致編譯不通過。

一、添加插件

在這裏插入圖片描述

二、配置

如下修改Project的build.gradle文件

 apply plugin: 'checkstyle'
    task checkstyle(type: Checkstyle) {
        source 'src'
        include '**/*.java'
        exclude '**/gen/**'
        exclude '**/test/**'
        exclude '**/androidTest/**'
        configFile new File(rootDir, "checkstyle.xml")
        classpath = files()
    }

在這裏插入圖片描述
設置配置文件checkstyle.xml,定義我們想要校驗的內容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
    "http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">
<module name="Checker">
    <property name="charset" value="UTF-8" />
    <property name="severity" value="error" />

    <!-- Checks for Size Violations.  -->
    <!-- 檢查文件的長度(行) default max=2500 -->
    <module name="FileLength">
        <property name="max" value="3000" />
        <property name="severity" value="warning" />
    </module>

    <!-- 檢查源碼中沒有製表符('\t') -->
    <module name="FileTabCharacter">
        <property name="eachLine" value="true" />
    </module>

    <module name="TreeWalker">
        <module name="SuppressWarningsHolder" />
        <!--空格檢測-->
        <module name="WhitespaceAround">
            <property name="allowEmptyConstructors" value="true" />
            <property name="allowEmptyMethods" value="true" />
            <property name="allowEmptyTypes" value="true" />
            <property name="allowEmptyLoops" value="true" />
            <message key="ws.notFollowed"
                value="WhitespaceAround: ''{0}'' is not followed by whitespace." />
            <message key="ws.notPreceded"
                value="WhitespaceAround: ''{0}'' is not preceded with whitespace." />
        </module>

        <module name="GenericWhitespace">
            <message key="ws.followed"
                value="GenericWhitespace ''{0}'' is followed by whitespace." />
            <message key="ws.preceded"
                value="GenericWhitespace ''{0}'' is preceded with whitespace." />
            <message key="ws.illegalFollow"
                value="GenericWhitespace ''{0}'' should followed by whitespace." />
            <message key="ws.notPreceded"
                value="GenericWhitespace ''{0}'' is not preceded with whitespace." />
        </module>

        <!-- Checks for imports    -->
        <!-- 必須導入類的完整路徑,即不能使用*導入所需的類 -->
        <module name="AvoidStarImport" />

        <!-- 檢查是否從非法的包中導入了類 illegalPkgs: 定義非法的包名稱-->
        <module name="IllegalImport" /> <!-- defaults to sun.* packages -->

        <!-- 檢查是否導入了不必顯示導入的類-->
        <module name="RedundantImport" />

        <!-- 檢查是否導入的包沒有使用-->
        <module name="UnusedImports" />

        <!-- 檢查代碼塊的左花括號的放置位置 -->
        <module name="LeftCurly">
            <property name="option" value="eol" />
        </module>

        <!--檢查代碼塊周圍是否有大括號,可以檢查do、else、if、for、while等關鍵字所控制的代碼塊-->
        <module name="NeedBraces">
            <property name="tokens"
                value="LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE" /> <!-- LITERAL_IF 不檢測-->
            <property name="allowSingleLineStatement" value="true" />
        </module>

        <!--檢查else、try、catch標記的代碼塊的右花括號的放置位置-->
        <module name="RightCurly">
            <property name="id" value="RightCurlySame" />
            <property name="tokens"
                value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO" />
        </module>

        <module name="RightCurly">
            <property name="id" value="RightCurlyAlone" />
            <property name="option" value="alone" />
            <property name="tokens"
                value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT" />
        </module>

        <!-- 檢查在重寫了equals方法後是否重寫了hashCode方法 -->
        <module name="EqualsHashCode" />

        <!--檢查是否有不合法的實例化操作,是否使用工廠方法更好-->
        <module name="IllegalInstantiation">
            <property name="classes" value="java.lang.Boolean" />
        </module>

        <!--檢查Java代碼的縮進是否正確-->
        <module name="Indentation">
            <property name="arrayInitIndent" value="8" />
        </module>

        <module name="SimplifyBooleanExpression" />

        <module name="SimplifyBooleanReturn" />

        <!--檢查每個變量是否使用一行一條語句進行聲明-->
        <!--<module name="MultipleVariableDeclarations" />-->

        <!--檢查數組定義的風格,默認java風格-->
        <module name="ArrayTypeStyle" />

        <!--檢查long類型的常量在定義時是否由大寫的“L”開頭-->
        <module name="UpperEll" />

        <!--檢查switch中case後是否加入了跳出語句,例如:return、break、throw、continue -->
        <module name="FallThrough" />

        <!-- Checks the number of parameters of a method or constructor. max default 7個. -->
        <module name="ParameterNumber">
            <property name="max" value="19" />
        </module>

        <!-- 每行字符數 -->
        <module name="LineLength">
            <property name="max" value="250" />
        </module>

        <!-- Checks for long methods and constructors. max default 150行. max=300 設置長度300 -->
        <module name="MethodLength">
            <property name="max" value="200" />
        </module>

        <!-- ModifierOrder 檢查修飾符的順序,默認是 public,protected,private,abstract,static,final,transient,volatile,synchronized,native -->
        <module name="ModifierOrder" />

        <!-- 檢查是否有多餘的修飾符,例如:接口中的方法不必使用public、abstract修飾  -->
        <!--<module name="RedundantModifier">-->
        <!--</module>-->

        <!--- 字符串比較必須使用 equals() -->
        <module name="StringLiteralEquality" />

        <!--限制try代碼塊的嵌套層數(默認值爲1)-->
        <module name="NestedTryDepth">
            <property name="max" value="2" />
        </module>

        <!-- 返回個數 -->
        <module name="ReturnCount">
            <property name="max" value="15" />
            <property name="maxForVoid" value="15" />
            <property name="format" value="^$" />
        </module>

    </module>

</module>

設置在Run之前執行checkstyle

1.選擇菜單Run–Edit Configurations
2.選擇Android Application–app,然後點擊Before Launch區域的綠色加號
3.點擊下拉菜單Gradle-aware Make,出現如下輸入對話框
4.輸入checkstyle,然後從聯想列表中選擇對應的checkstyle,保存。
5.再次運行就可以從Gradle Console中看到有checkstyle任務先執行了。

注意:如果上面的checkstyle失敗,則不進行後續的run操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章