https://github.com/dropbox/AffectedModuleDetector

dropboxが公開しているOSSでAffectedModuleDetectorというのがあります

Androidアプリ用のgradle pluginで、マルチモジュール構成の特定のモジュールに限定してgradleのテストタスクを実行できる機能を持っています

現時点ではテストタスクのみサポートされていますが、実はAffectedModuleDetectorは変更差分が影響を与えうるモジュールを検知できる機能をAPIとして提供しておりこれを使って独自のプラグインをつくることができます

testタスク以外に、Lintも変更差分があるモジュールで実行できれば十分なので、カスタムのLintプラグインのサンプルを作ってみました

https://github.com/marshi/AffectedModuleLintSample

masterブランチから新規にブランチを作って変更を加え、commitしたあとに下記コマンドを実行すると変更があるモジュールでのみLintが実行されることが確認できると思います

1
./gradlew runAffectedLint -Paffected_module_detector.enable -Paffected_module_detector.changedProjects

ちなみにパラメータはAffectedModuleDetectorで定義されているものなのでそちらをご参照ください

このサンプルではlintコマンドしか対象にしていませんが、ktlintが動く環境であればコメントアウトしているKtLint用のコードを動かせばktlint用のrunAffectedKtLintが実行できるようになります

ある程度コードベースが大きなアプリでは結構効果があるのではないでしょうか

実戦投入はまだですが、そのうちするつもりです