Сбой сборки Gradle при выполнении задачи lint

У меня есть простой проект для Android, который я создал с помощью Android Studio 0.4.0. Я использую Gradle 1.9 и Gradle Android Plugin 0.7. Вчера я добавил библиотеку ButterKnife Джейка Уортона в свой скрипт сборки gradle:

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.

Может мне чего-то не хватает, но не для того, чтобы собрать проект в клеммных колодках, возможность CI для проектов Android.

Любая помощь была бы замечательной.


person Serj Lotutovici    schedule 20.12.2013    source источник


Ответы (10)


В 0.7.0 появилась расширенная поддержка Lint, однако она не всегда работает должным образом. (Например, библиотека для масляных ножей)

Решение - отключить прерывание сборки при обнаружении ошибок 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/internalmodel/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'
  }
}
person Marek Sebera    schedule 20.12.2013
comment
Если вы хотите, вы можете отключить проверку пакетов только с помощью disable 'InvalidPackage' - person Calin; 20.12.2013
comment
Есть ли способ сделать это из корневого build.gradle, чтобы мне не приходилось разветвлять кучу разных подмодулей? - person ankushg; 28.12.2013
comment
@AnkushGupta, конечно, можно положить в корневой блок android{} - person Marek Sebera; 29.12.2013
comment
@MarekSebera Это работает, если у вас есть несколько библиотек Android и приложение для Android? Я не заставил его работать. Не могли бы вы показать пример того, как? - person riper; 21.01.2014
comment
@riper может потребоваться поместить lintOptions в библиотеки, но он должен работать, если вы поместите его в корневой блок android, попробуйте создать отдельный вопрос, если это как-то не сработает для вас. - person Marek Sebera; 21.01.2014
comment
Я не согласен с комментариями, которые вы поместили над вариантами enable и disable. Что я понимаю из ваших комментариев, так это то, что они ПРИНУДИТЕЛЬНО разрешают ТОЛЬКО перечисленные правила и фактически ВКЛЮЧАЮТ все проверки, кроме тех, которые вы явно ОТКЛЮЧАете. Это было бы довольно ограничивающе, я считаю, что эти функции больше похожи на флаги включения / выключения, не так ли? - person acrespo; 03.11.2015
comment
у моего build.gradle уже есть код ниже. lintOptions {abortOnError false} все равно не работает. Также пробовал с checkReleaseBuilds, отключал параметры в build.gradle и т.д., но не повезло. - person Nik; 09.01.2018

если abortOnError false не решит вашу проблему, вы можете попробовать это.

lintOptions {
    checkReleaseBuilds false
}
person panwy    schedule 24.06.2014
comment
Спасибо, спас мне день при компиляции с gradle-retrolambda и project-lombok в выпуске - person Jason Sparc; 17.01.2016

Здесь вы можете выбрать подходящие варианты.

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'
    }
}
person Biswajit Karmakar    schedule 20.06.2016
comment
Если вы действительно хотите использовать lint (хорошо), я думаю, это лучший способ - person Cícero Moura; 04.12.2019

У меня были некоторые ошибки lint в Android Studio, которые возникали только тогда, когда я сгенерировал подписанный APK.

Чтобы этого избежать, я добавил в build.gradle следующее:

android {
    lintOptions {
        checkReleaseBuilds false
    }
}
person Asaf Pinhassi    schedule 27.10.2014

Добавьте эти строки в свой файл build.gradle:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Затем очистите свой проект: D

person Muhamet Aljobairi    schedule 20.05.2014

Если вы не хотите использовать параметр «abortInError false», посмотрите файл build / lint-results-release-fatal.html. Вот ошибки, обнаруженные lint.

Надеюсь, это кому-нибудь поможет!

person Daniel S.    schedule 28.03.2014
comment
Действительно хорошее предложение, просто примечание, не все ошибки можно исправить вручную (например, отсутствует пакет javax.*) - person Marek Sebera; 30.04.2014

В Android Studio v1.2 рассказывается, как это исправить:

введите описание изображения здесь

person Allen    schedule 21.05.2015

Получена такая же ошибка на AndroidStudio версии 0.51

Сборка работала нормально, и внезапно, после изменения только значения кода версии, я получил ошибку сборки, связанную с Lint.

Пытался изменить build.gradle, очистил кеш AndroidStudio и перезапустил, но без изменений.

Наконец, я вернулся к исходному коду (вызвавшему ошибку) и удалил android:debuggable="false" из AndroidManifest.xml, что привело к успешной сборке.

Я добавил его снова, и он все еще работает ... Не спрашивайте, почему: S

person Cedric Simon    schedule 11.03.2014

На мой взгляд, это плохое и быстрое решение вашей проблемы:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Лучшее решение - это решение проблемы в вашем коде, потому что инструмент lint проверяет исходные файлы вашего проекта Android на наличие потенциальных ошибок и улучшений оптимизации на предмет корректности, безопасности, производительности, удобства использования, доступности и интернационализации.

Эта проблема возникает чаще всего в следующих случаях:

  • Макет включает неразрешенные символы или отсутствует какой-либо атрибут
  • Другие структурные проблемы, такие как использование устаревших элементов или вызовов API, которые не поддерживаются целевыми версиями API, могут привести к некорректной работе кода.

Найдите свои ошибки с помощью Inspect Code в Android Studio: Улучшите свой код с помощью Lint

person Dmytro Melnychuk    schedule 17.02.2017
comment
Благодарим за указание на противоположное плохому и быстрому решению. Я обнаружил множество проблем в отчете, созданном lint, доступном на Application/build/reports/lint-results.html. Отчет очень подробный и полезный. - person jgrocha; 19.12.2017

Добавлять

android.lintOptions.abortOnError false

в ваше приложение \ build.gradle

person Mpak    schedule 25.08.2017
comment
Я подозреваю, что ОП хотел бы немного пояснить, как это работает. - person sniperd; 25.08.2017