Android, Quellcode mit Checkstyle und FindBugs prüfen

In der Softwareentwicklung haben sich verschiedene Code Richtlinien gefestigt, seien es die „normalen“ Java Beans Konventionen oder aber auch wie in diesem Tutorial die Checkstyle und FindBugsrichtlinien, sicherlich gibt es hier auch viele andere Tools welche genannt werden könnten jedoch ist mir aufgefallen das die Checks sich wiederholen und somit der Mehrwert nicht deutlich steigt.

Hier in diesem Tutorial möchte ich nun beschreiben wie ich Checkstyle und Findbugs in meinem aktuellen Android Projekt eingerichtet habe.

Build Tool & IDE

Als Build Tool verwende, ich Gradle welche in dem Android Studio enthalten ist und somit nicht extra konfiguriert werden muss.

Anlegen der Verzeichnisstruktur

Für die Ablage der Konfigurationsdateien erstellt man folgende Verzeichnisstruktur
(gelb markiert).

Verzeichnisstruktur
Verzeichnisstruktur

Erstellen des Gradle Skriptes

Aus einem anderen englischsprachigen Tutorial habe ich mir ein passendes Gradle Script geladen und meinen Bedürfnissen wie folgt angepasst.
(Am Ende des Tutorials gibt es alle Dateien im praktischen ZIP Download)

apply plugin: 'checkstyle'
apply plugin: 'findbugs'

check.dependsOn 'checkstyle', 'findbugs', 'lint'

task checkstyle(type: Checkstyle) {
    configFile file("${project.rootDir}/config/checkstyle/sun_checks.xml")
    configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/checkstyle/suppressions.xml").absolutePath
    source 'src'
    include '**/*.java'
    exclude '**/gen/**'
    classpath = files()
}

task findbugs(type: FindBugs, dependsOn: assembleDebug) {
    ignoreFailures = false
    effort = "max"
    reportLevel = "high"
    excludeFilter = new File("${project.rootDir}/config/findbugs/findbugs-filter.xml")
    classes = files("${project.rootDir}/app/build/intermediates/classes")

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            destination "$project.buildDir/reports/findbugs/findbugs.xml"
        }
        html {
            destination "$project.buildDir/reports/findbugs/findbugs.html"
        }
    }

    classpath = files()
}

android {
    lintOptions {
        abortOnError true
        xmlReport false
        htmlReport true
        lintConfig file("${project.rootDir}/config/quality/lint/lint.xml")
        htmlOutput file("$project.buildDir/reports/lint/lint-result.html")
        xmlOutput file("$project.buildDir/reports/lint/lint-result.xml")
    }
}

Dieses Gradle Script muss nun noch in das bestehende Gradle Script integriert werden.

Dazu wird folgende Zeile der Datei „build.gradle (Module: app)“ hinzugefügt.

apply from: '../config/quality.gradle'

Ablage der Konfigurationsdateien für Checkstyle und FindBugs

Beispiel Konfigurationsdateien kann man auf der Herstellerseite herunterladen und nach seinen Bedürfnissen einfach anpassen.

Checkstyle

Ich habe mir die „sun_checks.xml“ geladen und einige für mich nicht benötigte Checks auskommentiert.

FindBugs

Eine Datei mit den FindBugs Filtern kann man unter http://findbugs.sourceforge.net/ finden.

Einbinden in den Buildprozess

Nachdem die Scripte erweitert bzw. angelegt wurden kann man die Task „checkstyle“ und „findbugs“ dem Buildprozess hinzufügen.
Dazu klickt man auf „Run“ -> „Edit Configurations“ dort wählt man die App aus (sollte vorselektiert sein.) und klickt im unteren Bereich aus das grüne + Zeichen dieses sollte nun folgendes Untermenü öffnen, wo wir den Eintrag „Run Gradle task“ auswählen.

Untermenü
Untermenü

Es sollte sich nun folgende Maske öffnen in welchem wir das Projekt wählen und den Task eingeben welcher gestartet werden soll.

Gradle Checkstyle Task
Gradle Checkstyle Task

Dieses wiederholen wir nun auch für den Findbugs Task und das Ergebnis sollte danach wiefolgt aussehen.

Gradle, Checkstyle und Findbugs Task
Gradle, Checkstyle und Findbugs Task

Nachdem der Dialog mit der Schaltfläche „Apply“ und „OK“ bestätigt wurde, wird nun bei jedem Build Vorgang Checkstyle und Findbugs gestartet. Sollte hier also Checkstyle bzw. Findbugs Fehler finden, so wird der Build nicht fortgesetzt.

Der Download

Hier nun der Download mit dem Gradle Script und den Checkstyle sowie Findbugs Konfigurationsdateien.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert