la construction de gradle échoue sur la tâche de lint

95

J'ai un projet Android simple que j'ai créé avec Android Studio 0.4.0. J'utilise Gradle 1.9 et Gradle Android Plugin 0.7. Hier, j'ai ajouté la bibliothèque ButterKnife de Jake Wharton dans mon script de construction 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'
}

Lorsque j'exécute l'application à partir d'Android Studio, la compilation fonctionne correctement et s'exécute correctement sur mes appareils. Mais quand j'essaye (à partir de la ligne de commande), gradle buildla construction échoue. Voici une partie de mon rapport sur les peluches:

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.

Il me manque peut-être quelque chose, mais pour ne pas pouvoir construire le projet dans les borniers, la possibilité de CI pour les projets Android.

Toute aide est la bienvenue.

Serj Lotutovici
la source

Réponses:

143

Avec la version 0.7.0, il existe un support étendu pour Lint, mais cela ne fonctionne pas toujours correctement. (Par exemple, la bibliothèque Butterknife)

La solution consiste à désactiver l'abandon de la compilation sur les erreurs de charpie trouvées

Je me suis inspiré de https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7

(mise en œuvre: https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7/build-system/gradle/src/main/groovy/com/android/buildault/gradle/internal/modelroid/Default.buildle/internal/modelroid/Default. )

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

Et si vous avez besoin de désactiver une règle Lint particulière et de maintenir l'échec de la construction sur les autres, utilisez ceci:

/*
 * 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
la source
19
Si vous le souhaitez, vous ne pouvez désactiver la vérification des paquets qu'avecdisable 'InvalidPackage'
Calin
Existe-t-il un moyen de le faire à partir de la racine build.gradle afin de ne pas avoir à fourcher un tas de sous-modules différents?
ankushg
2
@AnkushGupta, vous pouvez le mettre dans le android{}bloc racine bien sûr
Marek Sebera
@MarekSebera Cela fonctionne-t-il si vous avez un certain nombre de bibliothèques Android et une application Android? Je ne l'ai pas fait fonctionner. Pourriez-vous montrer un exemple de comment?
riper le
@riper, il peut être nécessaire de mettre le lintOptionsdans les bibliothèques, mais cela devrait fonctionner si vous le mettez dans le androidbloc racine , essayez de créer une question distincte, si cela ne fonctionne pas pour vous d'une manière ou d'une autre.
Marek Sebera
53

si abortOnError falsecela ne résoudra pas votre problème, vous pouvez essayer ceci.

lintOptions {
    checkReleaseBuilds false
}
panwy
la source
1
Merci, j'ai sauvé ma journée lors de la compilation avec gradle-retrolambdaet project-lomboken version
Jason Sparc
37

Vous pouvez sélectionner les options appropriées à partir d'ici

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
la source
Si vous voulez vraiment utiliser de la charpie (bonne), c'est le meilleur chemin que je pense
Cícero Moura
15

J'ai eu des erreurs de charpie dans Android Studio qui ne se sont produites que lorsque j'ai généré un APK signé.

Pour l'éviter, j'ai ajouté ce qui suit à build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
    }
}
Asaf Pinhassi
la source
11

Ajoutez ces lignes à votre fichier build.gradle:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Nettoyez ensuite votre projet: D

Muhamet Aljobairi
la source
8

Si vous voulez éviter l'option "abortInError false", jetez un œil au fichier build / lint-results-release-fatal.html. Voici les erreurs détectées par les peluches.

J'espère que cela peut aider quelqu'un!

Daniel S.
la source
1
En effet, une bonne suggestion, juste une note, toutes les erreurs ne peuvent pas être corrigées manuellement (comme un paquet manquant javax.*)
Marek Sebera
4

Dans Android Studio v1.2, il vous indique comment y remédier:

entrez la description de l'image ici

Allen
la source
3

Vous avez la même erreur sur AndroidStudio version 0.51

La construction fonctionnait bien et soudainement, après avoir seulement changé la valeur du code de version, j'ai eu une erreur de construction liée à Lint.

build.gradleJ'ai essayé de changer , effacé le cache d'AndroidStudio et redémarrer, mais aucun changement.

Enfin je suis retourné au code d' origine ( ce qui provoque l'erreur), et retiré android:debuggable="false"de AndroidManifest.xml, ce qui provoque l'accumulation de réussir.

Je l'ai ajouté à nouveau et cela fonctionne toujours ... Ne me demandez pas pourquoi: S

Cédric Simon
la source
3

Quant à moi, c'est une mauvaise et rapide solution à votre problème:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Une meilleure solution consiste à résoudre le problème dans votre code, car l'outil lint vérifie les fichiers source de votre projet Android pour les bogues potentiels et les améliorations d'optimisation pour l'exactitude, la sécurité, les performances, la convivialité, l'accessibilité et l'internationalisation.

Ce problème se produit le plus fréquemment lorsque:

  • La mise en page comprend des symboles non résolus ou un attribut manquant
  • D'autres problèmes structurels, tels que l'utilisation d'éléments obsolètes ou d'appels d'API qui ne sont pas pris en charge par les versions d'API cibles, peuvent entraîner l'échec du code à s'exécuter correctement.

Trouvez vos bogues Inspect Codedans Android Studio: améliorez votre code avec Lint

Dmytro Melnychuk
la source
1
Merci d'avoir signalé le contraire d'une mauvaise et rapide solution. J'ai découvert de nombreux problèmes sur le rapport généré par lint disponible sur Application/build/reports/lint-results.html. Le rapport est très détaillé et utile.
jgrocha
1

Ajouter

android.lintOptions.abortOnError false

à votre application \ build.gradle

Mpak
la source
1
Je soupçonne que l'OP aimerait avoir une petite explication sur le fonctionnement de ceci.
sniperd