gradle build tüy bırakmayan görevde başarısız oluyor


96

Android Studio 0.4.0 ile oluşturduğum basit bir android projem var. Gradle 1.9 ve Gradle Android Plugin 0.7 kullanıyorum. Dün, Jake Wharton's ButterKnife kitaplığını gradle oluşturma komut dosyama ekledim :

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

Uygulamayı Android Studio'dan çalıştırdığımda, yapı iyi çalışıyor ve cihazlarımda doğru şekilde çalışıyor. Ama denediğimde (komut satırından) gradle buildyapı başarısız oluyor. İşte tüy bırakmayan raporumdan bir bölüm:

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.

Belki bir şeyi kaçırıyorum, ancak projeyi terminalde inşa edememek, Android projeleri için CI olasılığını engelliyor.

Herhangi bir yardım harika olur.

Yanıtlar:


143

0.7.0 ile Lint için genişletilmiş destek gelir, ancak her zaman düzgün çalışmaz. (Ör. Butterknife kitaplığı)

Çözüm, bulunan tiftik hatalarında derlemeyi iptal etmeyi devre dışı bırakmaktır

İlhamı https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7'den aldım

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

(tartışma: 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
  }
}

Ve sadece belirli Lint kuralını devre dışı bırakmanız ve yapının diğerlerinde başarısız olmasını sağlamanız gerekiyorsa, şunu kullanın:

/*
 * 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
İsterseniz paket kontrolünü yalnızca disable 'InvalidPackage'
Calin

Bunu build.gradle kök dizininden yapmanın bir yolu var, böylece bir grup farklı alt modülü çatallamak zorunda kalmayayım?
ankushg

2
@AnkushGupta bunu android{}elbette kök bloğuna koyabilirsiniz
Marek Sebera

@MarekSebera Bu, birkaç Android kitaplığınız ve bir Android uygulamanız varsa çalışır mı? Ben işe yaramadım. Nasıl bir örnek gösterebilir misiniz?
2014

@riper lintOptions, kütüphanelere koymak gerekebilir , ancak bunu kök androidbloğuna koyarsanız çalışmalıdır, sizin için bir şekilde işe yaramazsa, ayrı bir soru oluşturmayı deneyin.
Marek Sebera

53

Eğer abortOnError false sorununuzu çözmek olmaz, bu deneyebilirsiniz.

lintOptions {
    checkReleaseBuilds false
}

1
Teşekkürler, derlerken gradle-retrolambdave project-lombokyayınlarken günümü kurtardım
Jason Sparc

38

Buradan uygun seçenekleri seçebilirsiniz

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
Gerçekten tiftik (iyi) kullanmak istiyorsanız, bu bence en iyi yol
Cícero Moura

15

Android Studio'da yalnızca imzalı bir APK oluşturduğumda meydana gelen bazı tüy bırakma hataları yaşadım.

Bundan kaçınmak için aşağıdakileri ekledim: build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
    }
}

11

Bu satırları build.gradle dosyanıza ekleyin:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Ardından projenizi temizleyin: D


8

"AbortInError false" seçeneğinden kaçınmak istiyorsanız, build / lint-results-release-fatal.html dosyasına bir göz atın. İşte tiftik tarafından tespit edilen hatalar.

Umarım bu birisine yardımcı olabilir!


1
Nitekim iyi bir öneri, sadece bir not, tüm hataları (örneğin paket eksik olarak elle düzeltilebilir javax.*)
Marek Sebera

4

Android Studio v1.2'de, bunu nasıl düzelteceğinizi anlatır:

görüntü açıklamasını buraya girin


3

AndroidStudio sürüm 0.51'de aynı hatayı aldım

Derleme iyi çalışıyordu ve aniden, yalnızca sürüm kodu değerini değiştirdikten sonra, Lint ile ilgili bir derleme hatası aldım.

Değiştirilmeye build.gradleçalışıldı, AndroidStudio önbelleği temizlendi ve yeniden başlatıldı, ancak değişiklik yapılmadı.

Sonunda (hataya neden) orijinal koduna döndü ve kaldırıldı android:debuggable="false"gelen AndroidManifest.xmlyapı başarılı neden.

Tekrar ekledim ve hala çalışıyor ... Neden diye sorma bana: S


3

Bana gelince , sorunun için kötü ve hızlı bir çözüm:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Lint aracı, Android proje kaynak dosyalarınızı olası hatalar için kontrol eder ve doğruluk, güvenlik, performans, kullanılabilirlik, erişilebilirlik ve uluslararasılaştırma için optimizasyon iyileştirmeleri için daha iyi bir çözüm kodunuzdaki sorunu çözmektir.

Bu sorun en sık şu durumlarda ortaya çıkar:

  • Düzen, çözülmemiş semboller içeriyor veya bazı nitelikler eksik
  • Kullanımdan kaldırılmış öğelerin kullanımı veya hedef API sürümleri tarafından desteklenmeyen API çağrıları gibi diğer yapısal sorunlar, kodun doğru çalışmamasına neden olabilir.

Hatalarınızı Inspect CodeAndroid Studio'da bulun : Lint ile Kodunuzu Geliştirin


1
Kötü ve hızlı bir çözümün tam tersini işaret ettiğiniz için teşekkürler . Adresinde bulunan lint tarafından oluşturulan raporda birçok sorun keşfettim Application/build/reports/lint-results.html. Rapor çok detaylı ve faydalı.
jgrocha

1

Ekle

android.lintOptions.abortOnError false

uygulamanıza \ build.gradle


1
OP'nin bunun işleyişiyle ilgili küçük bir açıklama isteyeceğinden şüpheleniyorum.
2017
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.