lint 작업에서 gradle 빌드가 실패합니다.


96

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

2
@AnkushGupta 당신은 루트에 넣을 수 android{}물론 블록
마렉 Sebera에게

@MarekSebera 많은 Android 라이브러리와 Android 애플리케이션이있는 경우 작동합니까? 나는 그것을 작동하지 않았다. 방법에 대한 예를 보여줄 수 있습니까?
익히기

@riper lintOptions라이브러리에 를 넣어야 할 수도 있지만 루트 android블록에 넣으면 작동합니다. 어떻게 든 작동하지 않으면 별도의 질문을 만들어보십시오.
Marek Sebera 2014 년

53

문제 abortOnError false가 해결되지 않으면 시도해 볼 수 있습니다.

lintOptions {
    checkReleaseBuilds false
}

1
로 컴파일 할 때 감사합니다, 내 하루를 저장 gradle-retrolambdaproject-lombok방출에
제이슨 스팍

38

여기에서 적절한 옵션을 선택할 수 있습니다.

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

1
당신이 정말로 사용 보풀 (좋은)하려면, 그게 내가 생각하는 가장 좋은 경로입니다
키케로 모 우라

15

서명 된 APK를 생성 할 때만 발생하는 Android Studio에서 일부 Lint 오류가 발생했습니다.

그것을 피하기 위해 다음을 추가했습니다. build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
    }
}

11

build.gradle 파일에 다음 행을 추가하십시오.

android { 
  lintOptions { 
    abortOnError false 
  }
}

그런 다음 프로젝트를 청소하십시오.


8

"abortInError false"옵션을 피하려면 build / lint-results-release-fatal.html 파일을 살펴보십시오. 다음은 보푸라기가 감지 한 오류입니다.

나는 이것이 누군가를 도울 수 있기를 바랍니다!


1
실제로 좋은 제안, 메모, 모든 오류를 수동으로 javax.*
수정할 수있는 것은 아닙니다 (

4

Android Studio v1.2에서는 수정 방법을 알려줍니다.

여기에 이미지 설명 입력


3

AndroidStudio 버전 0.51에서 동일한 오류가 발생했습니다.

빌드가 제대로 작동하고 갑자기 버전 코드 값만 변경 한 후 Lint 관련 빌드 오류가 발생했습니다.

변경을 시도하고 build.gradleAndroidStudio 캐시를 지우고 다시 시작했지만 변경 사항은 없습니다.

마지막으로 나는 (오류의 원인이) 원래 코드에 반환, 제거 android:debuggable="false"에서 AndroidManifest.xml빌드가 성공의 원인.

다시 추가했는데 여전히 작동합니다 ... 이유를 묻지 마십시오.


3

저에게는 문제에 대한 나쁘고 빠른 해결책입니다.

android { 
  lintOptions { 
    abortOnError false 
  }
}

더 나은 솔루션Lint 도구는 잠재적 버그가 있는지 Android 프로젝트 소스 파일을 확인하고 정확성, 보안, 성능, 유용성, 접근성, 국제화를위한 최적화 개선 사항을 확인하므로 은 코드의 문제를 해결하는 것입니다.

문제는 다음과 같은 경우에 가장 자주 발생합니다 .

  • 레이아웃에 해결되지 않은 기호가 포함되거나 일부 속성이 누락 됨
  • 더 이상 사용되지 않는 요소 또는 대상 API 버전에서 지원하지 않는 API 호출과 같은 기타 구조적 문제로 인해 코드가 올바르게 실행되지 않을 수 있습니다.

Inspect CodeAndroid Studio에서 버그 찾기 : Lint로 코드 개선


1
나쁘고 빠른 해결책 의 반대를 지적 해 주셔서 감사합니다 . 에서 제공 되는 lint로 생성 된 보고서에서 많은 문제를 발견 했습니다 Application/build/reports/lint-results.html. 보고서는 매우 상세하고 유용합니다.
jgrocha

1

더하다

android.lintOptions.abortOnError false

app \ build.gradle에


1
나는 OP가 이것의 작동에 대해 약간의 설명을 원할 것이라고 생각합니다.
sniperd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.