【Android】コマンドラインから使うLint


Androidの静的解析ツールであるLintをコマンドラインから簡単に使用する方法を紹介。

そもそもLintって何?

以下の公式サイトの説明を見ると、なんとなくわかる。

Improving Your Code with lint

ざっくり言って以下のような感じ。
※実際にはもっと色々チェックしてくれますが、詳細は割愛

  • 静的解析ツールなので、XMLの記載方法のミスや使われていないリソースの洗い出し等ができる
  • Javaの静的解析もある程度可能。Androidに特化した静的解析がメイン
  • Android Studioにも入っているので気軽に使える。てか、実は勝手に動いてる。
  • 設定ファイルであるlint.xmlをカスタマイズすることで、自分好みの静的解析が可能になる

静的解析ツール Lintをコマンドラインから使用する

使い方はとても簡単。
※lintへのpathが通っていること前提

lint <アプリケーションのDirectory>

これだけで使えるのですが、コマンドラインに出力するだけではあまり意味がないし、すげーわかりにくい。

Lintの解析結果をHTMLへ出力する

こっちが本題。
以下のようなコマンドで静的解析の結果をHTMLへ出力できる。

lint <アプリケーションのDirectory> --html <出力ファイル名>.html

実行すると、アプリケーションのDirectory直下に、静的解析の結果がHTMLで出力されます。
HTMLの他にCSSと画像のDirectoryも作成されます。

以下のようなHTMLが出力されます。

ざっと見ていくと以下のように、文字を@stringで定義してくださいねーみたいなチェックをしてくれてます。
XMLやリソースの静的解析が網羅的に行えるのでとても便利です。

--simplehtml

--htmlでHTML出力するだけでも十分いい感じなんですが、HTML以外にCSSと画像のDirectoryが生成されます。
コレが嫌だ-!という人のためのオプションが--simplehtmlオプションです。
使い方はほとんどHTML出力の際と変わりません。

lint <アプリケーションのDirectory> --simplehtml <出力ファイル名>.html

出力されるHTML内にCSSが一緒になって出力されます。
画像(error、Warning等)は付いてきません。

その他つけておくといいかもねーオプション

--fullpathオプションをつけると、出力されるHTMLにコードへのFilePathがFullPathで記載されるようになります。
デフォルトでは、相対パス的な感じになってます。

--quietオプションをつけると、コマンド実行中にprogress indicatorが出なくなります。
デフォルトでは、コマンド実行中に以下のようなprogress indicatorが出てます。
※正直どうでもいいかー

Scanning debug: .
Scanning debug (Phase 2):
Scanning main: ................
Scanning main (Phase 2): ...............
Scanning debug: .
Scanning debug (Phase 2):

その他にもオプションはいっぱいありますので、自分好みのコマンドを作成してみてください!

以下にLintコマンドの説明が記載されています。
http://developer.android.com/tools/help/lint.html

My Lint Command

ということで、私が日頃使っているLintコマンドを書いておきます。
工夫点は、出力するHTMLのファイル名に実行時の日付を付けるところですね。

// Windows
lint <アプリケーションのDirectory> --fullpath --quiet --html lint_%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%.html

// Linux・Mac
lint <アプリケーションのDirectory> --fullpath --quiet --html lint_$(date +"%Y%m%d-%H%M%S").html

まとめ

Android Studio等からも気軽に使えますが、コマンドラインから使用する方法も覚えておくと何かと便利です。
例えば、コマンドラインから使えるようにしておくと以下のようなことができます。

  • CI ( Jenkinsとか )で定期的にコマンドラインからLintを実行して、結果をHTML出力するみたいなことが可能
  • 上記と似たようなことで、git pushしたタイミングでLintの実行ができるとか。環境を作る必要はあり

AndroidのToolはGuiから使う方が便利ですが、やっぱりコマンドラインから使用する方法を知っておくと何かと便利ですねー。