build gradle gagal pada tugas lint

96

Saya memiliki proyek android sederhana yang saya buat dengan Android Studio 0.4.0. Saya menggunakan Gradle 1.9 dan Gradle Android Plugin 0.7. Kemarin saya telah menambahkan perpustakaan ButterKnife Jake Wharton dalam skrip build gradle saya:

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'
}

Saat saya menjalankan aplikasi dari Android Studio, build berjalan dengan baik dan dieksekusi dengan benar di perangkat saya. Tetapi ketika saya mencoba (dari baris perintah) gradle build, build gagal. Ini adalah bagian dari laporan lint saya:

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.

Mungkin saya melewatkan sesuatu, tetapi tidak dapat membangun proyek di terminal memblokir kemungkinan CI untuk proyek Android.

Bantuan apa pun akan sangat bagus.

Serj Lotutovici
sumber

Jawaban:

143

Dengan 0.7.0, ada dukungan tambahan untuk Lint, namun tidak selalu berfungsi dengan baik. (Misalnya perpustakaan pisau mentega)

Solusinya adalah menonaktifkan pembatalan build pada kesalahan lint yang ditemukan

Saya mengambil inspirasi dari https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7

(penerapan: https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7/build-system/gradle/src/main/groovy/com/android/build/gradle/inava/model/DefaultAndroidPro )

(diskusi: 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
  }
}

Dan jika Anda hanya perlu menonaktifkan aturan Lint tertentu dan membuat build gagal pada yang lain, gunakan ini:

/*
 * 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'
  }
}
Marek Sebera
sumber
19
Jika mau, Anda hanya dapat menonaktifkan pemeriksaan paket dengandisable 'InvalidPackage'
Calin
Apakah ada cara untuk melakukan ini dari root build.gradle sehingga saya tidak perlu membuat banyak submodul yang berbeda?
ankushg
2
@AnkushGupta Anda tentu saja dapat meletakkannya di android{}blok root
Marek Sebera
@MarekSebera Apakah itu berfungsi jika Anda memiliki sejumlah pustaka Android dan aplikasi Android? Saya tidak membuatnya bekerja. Bisakah Anda menunjukkan contoh tentang bagaimana?
riper
@riper mungkin perlu untuk meletakkannya lintOptionsdi perpustakaan, tetapi itu harus bekerja jika Anda meletakkan ini ke dalam androidblok root , coba buat pertanyaan terpisah, jika itu tidak berhasil untuk Anda entah bagaimana.
Marek Sebera
53

jika abortOnError falsetidak akan menyelesaikan masalah Anda, Anda dapat mencoba ini.

lintOptions {
    checkReleaseBuilds false
}
panwy
sumber
1
Terima kasih, selamat hari saya saat menyusun dengan gradle-retrolambdadan project-lombokdalam rilis
Jason Sparc
38

Anda dapat memilih opsi yang tepat dari sini

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'
    }
}
Biswajit Karmakar
sumber
1
Jika Anda benar-benar ingin menggunakan lint (bagus), menurut saya itu adalah cara terbaik
Cícero Moura
15

Saya mengalami beberapa kesalahan lint di Android Studio yang terjadi hanya ketika saya membuat APK yang ditandatangani.

Untuk menghindarinya, saya menambahkan yang berikut ini ke build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
    }
}
Asaf Pinhassi
sumber
11

Tambahkan baris ini ke file build.gradle Anda:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Kemudian bersihkan proyek Anda: D

Muhamet Aljobairi
sumber
8

Jika Anda ingin menghindari opsi "abortInError false", lihat file build / lint-results-release-fatal.html. Berikut adalah kesalahan yang terdeteksi oleh lint.

Saya harap ini dapat membantu seseorang!

Daniel S.
sumber
1
Memang saran yang bagus, hanya catatan, tidak semua kesalahan dapat diperbaiki secara manual (seperti paket yang hilang javax.*)
Marek Sebera
4

Di Android Studio v1.2, ini memberi tahu Anda cara memperbaikinya:

masukkan deskripsi gambar di sini

Allen
sumber
3

Mendapat kesalahan yang sama pada AndroidStudio versi 0.51

Build berfungsi dengan baik dan tiba-tiba, setelah hanya mengubah nilai kode versi, saya mendapat error build terkait Lint.

Mencoba mengubah build.gradle, membersihkan cache AndroidStudio dan memulai ulang, tetapi tidak ada perubahan.

Akhirnya saya kembali ke kode asli (menyebabkan kesalahan), dan dihapus android:debuggable="false"dari AndroidManifest.xml, menyebabkan build berhasil.

Saya menambahkannya lagi dan masih berfungsi ... Jangan tanya saya mengapa: S

Cedric Simon
sumber
3

Bagi saya, ini adalah solusi yang buruk dan cepat untuk masalah Anda:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Solusi yang lebih baik adalah memecahkan masalah dalam kode Anda, karena alat lint memeriksa file sumber proyek Android Anda untuk kemungkinan bug dan peningkatan pengoptimalan untuk kebenaran, keamanan, kinerja, kegunaan, aksesibilitas, dan internasionalisasi.

Masalah ini paling sering terjadi ketika:

  • Tata letak menyertakan simbol yang belum terselesaikan atau beberapa atribut hilang
  • Masalah struktural lainnya, seperti penggunaan elemen yang tidak digunakan lagi atau panggilan API yang tidak didukung oleh versi API target, dapat menyebabkan kode gagal berjalan dengan benar.

Temukan bug Anda Inspect Codedi Android Studio: Tingkatkan Kode Anda dengan Lint

Dmytro Melnychuk
sumber
1
Terima kasih telah menunjukkan kebalikan dari solusi yang buruk dan cepat . Saya menemukan banyak masalah pada laporan yang dibuat oleh lint yang tersedia di Application/build/reports/lint-results.html. Laporan tersebut sangat rinci dan bermanfaat.
jgrocha
1

Menambahkan

android.lintOptions.abortOnError false

ke aplikasi \ build.gradle Anda

Mpak
sumber
1
Saya menduga OP ingin sedikit penjelasan tentang cara kerja ini.
sniperd