web-dev-qa-db-ja.com

Android studioプロジェクトをビルドするときにlintを実行します

Android studioでプロジェクトをビルドするときにlintタスクを実行して、lintルールが確実に守られるようにしたいと思います。

タスクの依存関係を使用しようとしましたが、運がありません。私のteamcityビルドサーバーは、lintタスクを実行するビルドタスクを使用しているため、非常に効果的です。ただし、デバッグビルドバリアントを選択すると、Android studioはgenerateDebugSourcesタスクとcompileDebugJavaタスクを同じように使用するように見えます。

Build.gradleで試したことは次のとおりです。

assemble.dependsOn lint
35
Robert

Android Studioプロジェクトを設定して、gradleタスクの設定方法に影響を与えずにデフォルトの実行設定の前にlintチェックを実行する場合は、次の手順を実行できます。

  1. 実行構成のドロップダウンを開き、編集を選択します

enter image description here

  1. アプリの実行構成を選択します

enter image description here

  1. 「+」を押して新しいステップを追加します

enter image description here

  1. 「Gradle-aware Make」を選択します

enter image description here

  1. 「check」と入力し、アプリモジュール名とチェックのオプションを選択します。 (私のものは:app:check

enter image description here

  1. 上矢印を押して、既存のGradle-aware makeステップの前に新しいcheckステップを移動します

enter image description here

ここで、Android Studioはlintチェックを実行し、lintエラーが発生するとビルドに失敗します。

33
Ross Hambrick

Lintを実行してプロジェクトを分析するには、単にAnalyze > Inspect Code

すべての問題が表示された素敵なウィンドウが表示されます。

enter image description here

詳細については、 lint in Android Studio を実行してください。


もう少し調査しました。これをbuild.gradle

lintOptions {
      abortOnError true
  } 

多くの options があり、build.gradle

31
AndyGable

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)
}
14

「チェック」タスクを実行するだけです

./gradlew clean check assembleRelease

7
stephane k.

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を、すでに定義した目的のビルドバリアントに置き換えます。 compileReleaseSourcescompileDebugSourcescompileStagingDebugSourcesなど.

これは、Android Studio 3.0

4
Phileo99

ビルド-プロジェクトの作成 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()
                }
        }
    }
}
3
TmTron

@Yoel Gluschnaiderの答えを修正するだけ

私にとってvalを使用すると、次のようなエラーが表示されます。タイプcom.Android.build.gradle.internal.api.ApplicationVariantImplのオブジェクトに不明なプロパティ「lintTask」を設定できませんでした。

だから私はそれを交換します

applicationVariants.all {
    def lintTask = tasks["lint${name.capitalize()}"]
    assembleProvider.get().dependsOn.add(lintTask)
}

そしてその仕事は大丈夫!!

1
Rushabh Shah