Help us understand the problem. What is going on with this article?

10分で AndroidStudio + Checkstyle の環境構築

More than 5 years have passed since last update.

目的

静的解析ツールであるCheckstyleをAndroidStudioで利用し、コーディングスタイルへの準拠を担保する
その際、以下の2つの場面で利用出来る環境を構築する

  • コーディング中にチェックを行うため、AndroidStudio上で動的に解析
  • CIツールで定常的にチェックを行うため、コマンドラインでの解析

環境

  • Android 5.0
  • AndroidStudio 1.0
  • gradle 2.2.1

準備

まずはCheckstyleの設定ファイルを作成しておく
これはCheckstyleのページを参考に作成しても良いし、インターネットで検索して拾ってきても良い
AndroidStudioはEclipseのようにGUI上でCheckstyleの設定ファイルを編集できないようなので、ここではEclipseで設定ファイルを編集する方法を参考として記載する
Eclipse Checkstyle Plug-inを利用するとGUIで設定ファイルを作れる
Eclipseを日本語化していると日本語で設定できてお勧め
下記、Eclipse 4.4.1 で作業を行った

  • Help > Install New Software で下記URLを入力
  • Eclipse Checkstyle Plug-in を選択し、インストール
  • Eclipse > 環境設定 > Checkstyle で設定ファイルを作成、編集して、最後に Export ボタンでxmlファイルを出力する

Eclipseを日本語化していると以下のような感じで編集できる
eclipse_checkstyle.png

最後に作成した設定ファイルをAndroidStudioのプロジェクト内にコピーしておく
今回は[PROJECT_ROOT]/config/checkstyle/checkstyle.xmlにコピーした

AndroidStudio上で実行するための環境設定

CheckStyle-IDEAプラグインを利用する

  • Android Studio > Preferences > Plugins で Checkstyle-IDEA を検索し、インストールする
    • 執筆時のCheckstyle-IDEAのバージョンは4.11.1
  • Android Studio > Preferences > CheckStyle > +ボタン でプロジェクト内にコピーした設定ファイルのパスを指定する
    • このとき、Store relative to project location をチェックしておくとVCSでCheckstyleの設定ファイルを管理するときに便利
  • 追加した設定のActiveチェックボックスにチェックする checkstyle_setting.png

AndroidStudio上での実行

  • この状態でソースコードを開くと既にCheckstyleによる指摘が行われている
  • Analyze > Inspect Code から任意のスコープで解析を行うこともできる
  • Checkstyleウィンドウ から任意のファイルで解析を行うこともできる checkstyle_tab.png

コマンドラインで実行するための環境設定

  • [MODULE_ROOT]/build.gradle にcheckstyleプラグインを適用する
[MODULE_ROOT]/build.gradle
apply plugin: 'checkstyle'
  • checkstyleタスクを追加する
[MODULE_ROOT]/build.gradle
task checkstyle(type: Checkstyle) {
    configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml")
    source 'src/main'
    include '**/*.java'
    reports {
        xml {
            destination "${project.rootDir}/build/reports/checkstyle.xml"
        }
    }
    classpath = files()
}
  • ライブラリモジュールも解析対象にしたい場合は、それぞれのモジュールのbuild.gradleを編集しても良いが、下記のようにsourceを追加していけばよい
[MODULE_ROOT]/build.gradle
task checkstyle(type: Checkstyle) {
    configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml")
    source 'src/main'
    source "${project.rootDir}/[MODULE名]/src/main" // *ここに追加*
    include '**/*.java'
    reports {
        xml {
            destination "${project.rootDir}/build/reports/checkstyle.xml"
        }
    }
    classpath = files()
}
  • checkタスクにcheckstyleタスクを追加する
[MODULE_ROOT]/build.gradle
check.dependsOn 'checkstyle'

コマンドラインで実行

  • ターミナルより$./gradlew checkstyleを行うと結果が${project.rootDir}/build/reports/checkstyle.xmlへ保存される
  • checkタスクにcheckstyleタスクを追加した場合は$./gradlew checkでも同様にCheckstyleの結果が保存される

おまけ (Robolectricプラグインとの併用)

Robolectricプラグインを適用して$./gradlew checkを行うと以下のエラーがでた

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkstyleTestDebug'.
> Unable to create a Checker: unable to find /Users/usamao/Workspace/SampleApp/app/config/checkstyle/checkstyle.xml

RobolectricプラグインがcheckタスクにcheckstyleTestDebugタスクを追加している
恐らくテストコードのCheckstyleによる解析を行おうとしているようだが、このタスクで行う必要性が感じられないため以下を追加し、checkstyleTestDebugタスクを無効化した

[MODULE_ROOT]/build.gradle
preBuild.doFirst {
    checkstyleTestDebug.enabled = false
}

まとめ

コマンドラインでCheckstyleを実行する際、gradleのページよりcheckstyleプラグインさえ適用すればcheckstyleMainタスクが自動で追加されることを期待していたが、実際には追加されていなかった
こちらのページに記述されているが、Android gradleビルドシステムと挙動の違いがあるようで、Antタスクのラッパーをつくるなどして回避する必要があるようだ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away