lintタスクでGradleビルドが失敗する


95

Android Studio 0.4.0で作成したシンプルなAndroidプロジェクトがあります。Gradle 1.9とGradle Android Plugin 0.7を使用しています。昨日、gradleビルドスクリプトにJake WhartonのButterKnifeライブラリを追加しました。

dependencies {
            compile 'com.android.support:support-v4:19.0.0'
            compile 'com.android.support:appcompat-v7:19.0.0'

            // Butterknife
            compile 'com.jakewharton:butterknife:4.0.1'
}

Android Studioからアプリケーションを実行すると、ビルドが正常に実行され、デバイスで正しく実行されます。しかし、(コマンドラインから)試行するとgradle build、ビルドが失敗します。これが私の糸くずレポートの一部です:

InvalidPackage: Package not included in Android

/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.

多分私は何かが足りないかもしれませんが、ターミナルでプロジェクトを構築できないために、AndroidプロジェクトのCIの可能性がブロックされます。

どんな助けでも素晴らしいでしょう。

回答:


143

0.7.0リントのための拡張サポートが来て、しかし、それは正しく常に動作しません。(例:バターナイフライブラリ)

解決策は、見つかったlintエラーでビルドの中止を無効にすることです

https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7からインスピレーションを受けました

(実装:https : //android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/model/DefaultAndroidProject.java

(ディスカッション:https : //plus.google.com/+AndroidDevelopers/posts/ersS6fMLxw1

android {
  // your build config
  defaultConfig { ... }
  signingConfigs { ... }
  compileOptions { ... }
  buildTypes { ... }
  // This is important, it will run lint checks but won't abort build
  lintOptions {
      abortOnError false
  }
}

また、特定のLintルールのみを無効にし、他のルールでビルドが失敗し続けるようにする必要がある場合は、次のようにします。

/*
 * Use only 'disable' or only 'enable', those configurations exclude each other
 */
android {
  lintOptions {
    // use this line to check all rules except those listed
    disable 'RuleToDisable', 'SecondRuleToDisable'
    // use this line to check just listed rules
    enable 'FirstRuleToCheck', 'LastRuleToCheck'
  }
}

19
必要な場合のみ、パッケージチェックを無効にできますdisable 'InvalidPackage'
Calin

ルートbuild.gradleからこれを行う方法はありますので、さまざまなサブモジュールの束をフォークする必要はありませんか?
ankushg 2013

2
@AnkushGuptaあなたandroid{}はもちろんそれをルートブロックに置くことができます
Marek Sebera

@MarekSebera多くのAndroidライブラリとAndroidアプリケーションがある場合、それは機能しますか?うまくいきませんでした。どのように例を示していただけますか?
riper 2014年

@riperをlintOptionsライブラリに配置する必要がある場合がありますが、これをルートandroidブロックに配置すると機能するはずです。何らかの方法で機能しない場合は、別の質問を作成してみてください。
Marek Sebera 2014年

53

abortOnError false問題が解決しない場合は、これを試すことができます。

lintOptions {
    checkReleaseBuilds false
}

1
おかげで、リリース時gradle-retrolambdaおよびproject-lombokリリース時にコンパイルするときに私の日を節約しました
Jason Sparc

37

ここから適切なオプションを選択できます

android {
    lintOptions {
        // set to true to turn off analysis progress reporting by lint
        quiet true
        // if true, stop the gradle build if errors are found
        abortOnError false
        // if true, only report errors
        ignoreWarnings true
        // if true, emit full/absolute paths to files with errors (true by default)
        //absolutePaths true
        // if true, check all issues, including those that are off by default
        checkAllWarnings true
        // if true, treat all warnings as errors
        warningsAsErrors true
        // turn off checking the given issue id's
        disable 'TypographyFractions','TypographyQuotes'
        // turn on the given issue id's
        enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
        // check *only* the given issue id's
        check 'NewApi', 'InlinedApi'
        // if true, don't include source code lines in the error output
        noLines true
        // if true, show all locations for an error, do not truncate lists, etc.
        showAll true
        // Fallback lint configuration (default severities, etc.)
        lintConfig file("default-lint.xml")
        // if true, generate a text report of issues (false by default)
        textReport true
        // location to write the output; can be a file or 'stdout'
        textOutput 'stdout'
        // if true, generate an XML report for use by for example Jenkins
        xmlReport false
        // file to write report to (if not specified, defaults to lint-results.xml)
        xmlOutput file("lint-report.xml")
        // if true, generate an HTML report (with issue explanations, sourcecode, etc)
        htmlReport true
        // optional path to report (default will be lint-results.html in the builddir)
        htmlOutput file("lint-report.html")

        // set to true to have all release builds run lint on issues with severity=fatal
        // and abort the build (controlled by abortOnError above) if fatal issues are found
        checkReleaseBuilds true
        // Set the severity of the given issues to fatal (which means they will be
        // checked during release builds (even if the lint target is not included)
        fatal 'NewApi', 'InlineApi'
        // Set the severity of the given issues to error
        error 'Wakelock', 'TextViewEdits'
        // Set the severity of the given issues to warning
        warning 'ResourceAsColor'
        // Set the severity of the given issues to ignore (same as disabling the check)
        ignore 'TypographyQuotes'
    }
}

あなたが本当に糸くず(良い)を使用する場合、それは私が考える最良の道である
キケロモウラ

15

署名されたAPKを生成したときにのみAndroid Studioでリントエラーが発生しました。

それを避けるために、私は以下を追加しました build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
    }
}


8

「abortInError false」オプションを避けたい場合は、build / lint-results-release-fatal.htmlファイルを確認してください。lintによって検出されたエラーは次のとおりです。

これが誰かに役立つことを願っています!


1
確かに良い提案、単なるメモ、すべてのエラーが手動で修正できるわけではありません(パッケージの欠落などjavax.*
Marek Sebera 2014

4

Android Studio v1.2では、それを修正する方法を説明しています。

ここに画像の説明を入力してください


3

AndroidStudioバージョン0.51で同じエラーが発生する

ビルドは正常に機能していましたが、突然バージョンコード値を変更しただけで、Lint関連のビルドエラーが発生しました。

変更を試みbuild.gradle、AndroidStudioのキャッシュをクリアして再起動しましたが、変更はありませんでした。

最後に、元のコードに戻り(エラーの原因)、から削除android:debuggable="false"AndroidManifest.xml、ビルドを成功させました。

私はそれを再び追加し、それはまだ動作します...なぜ私に尋ねないでください:S


3

私にとっては、それはあなたの問題のための悪くて迅速な解決策です:

android { 
  lintOptions { 
    abortOnError false 
  }
}

lintツールは、正確性、セキュリティ、パフォーマンス、使いやすさ、アクセシビリティ、および国際化のための潜在的なバグと最適化の改善についてAndroidプロジェクトのソースファイルをチェックするため、コードの問題を解決する方が良い解決策です。

この問題は次の場合に最も頻繁に発生します。

  • レイアウトに未解決の記号が含まれているか、一部の属性が欠落しています
  • 廃止された要素の使用や、対象のAPIバージョンでサポートされていないAPI呼び出しなど、その他の構造上の問題により、コードが正しく実行されない可能性があります。

Inspect CodeAndroid Studioでバグを見つける:Lintを使用してコードを改善する


1
良くない迅速な解決策の反対を指摘してくれてありがとう。で入手可能なlintによって生成されたレポートで多くの問題を発見しましたApplication/build/reports/lint-results.html。レポートは非​​常に詳細で役に立ちます。
jgrocha 2017

1

追加

android.lintOptions.abortOnError false

app \ build.gradle


1
OPがこの仕組みについて少し説明したいと思うのではないでしょうか。
2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.