Android studioでプロジェクトをビルドするときにlintタスクを実行して、lintルールが確実に守られるようにしたいと思います。
タスクの依存関係を使用しようとしましたが、運がありません。私のteamcityビルドサーバーは、lintタスクを実行するビルドタスクを使用しているため、非常に効果的です。ただし、デバッグビルドバリアントを選択すると、Android studioはgenerateDebugSourcesタスクとcompileDebugJavaタスクを同じように使用するように見えます。
Build.gradleで試したことは次のとおりです。
assemble.dependsOn lint
Android Studioプロジェクトを設定して、gradleタスクの設定方法に影響を与えずにデフォルトの実行設定の前にlintチェックを実行する場合は、次の手順を実行できます。
:app:check
)Gradle-aware make
ステップの前に新しいcheck
ステップを移動しますここで、Android Studioはlintチェックを実行し、lintエラーが発生するとビルドに失敗します。
Lintを実行してプロジェクトを分析するには、単にAnalyze > Inspect Code
。
すべての問題が表示された素敵なウィンドウが表示されます。
詳細については、 lint in Android Studio を実行してください。
もう少し調査しました。これをbuild.gradle
。
lintOptions {
abortOnError true
}
多くの options があり、build.gradle
Build.gradleでこれを行うには、build.gradleに次の行を追加します。
Android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
def lintTask = tasks["lint${variant.name.capitalize()}"]
output.assemble.dependsOn lintTask
}
}
...
}
これにより、すべてのアセンブルタスクは、Android Studio。
編集
Android Gradle Plugin 3.3およびGradle 5.xでは、これはKotlinスクリプトを使用した改訂版です。
applicationVariants.all {
val lintTask = tasks["lint${name.capitalize()}"]
assembleProvider.get().dependsOn.add(lintTask)
}
「チェック」タスクを実行するだけです
./gradlew clean check assembleRelease
Android Studioプロジェクトがデフォルトの実行構成の前にlintチェックを実行し、gradleタスクの構成に影響を与えずに、かつgradleビルドシステムでこれを実行する場合は、次のように、appモジュールのbuild.gradleのAndroid
ブロックの外側に次のブロックを追加できます。
Android {
....
lintOptions {
abortOnError true
}
}
tasks.whenTaskAdded { task ->
if (task.name == 'compileDevDebugSources') {
task.dependsOn lint
task.mustRunAfter lint
}
}
compileDevDebugSources
を、すでに定義した目的のビルドバリアントに置き換えます。 compileReleaseSources
、compileDebugSources
、compileStagingDebugSources
など.
これは、Android Studio 3.0
ビルド-プロジェクトの作成 in Android Studio:
Android {
..
afterEvaluate {
applicationVariants.all {
variant ->
// variantName: e.g. Debug, Release
def variantName = variant.name.capitalize()
// now we tell gradle to always start lint after compile
// e.g. start lintDebug after compileDebugSources
project.tasks["compile${variantName}Sources"].doLast {
project.tasks["lint${variantName}"].execute()
}
}
}
}
@Yoel Gluschnaiderの答えを修正するだけ
私にとってvalを使用すると、次のようなエラーが表示されます。タイプcom.Android.build.gradle.internal.api.ApplicationVariantImplのオブジェクトに不明なプロパティ「lintTask」を設定できませんでした。
だから私はそれを交換します
applicationVariants.all {
def lintTask = tasks["lint${name.capitalize()}"]
assembleProvider.get().dependsOn.add(lintTask)
}
そしてその仕事は大丈夫!!