La compilación de gradle falla en la tarea de pelusa

95

Tengo un proyecto de Android simple que creé con Android Studio 0.4.0. Utilizo Gradle 1.9 y el complemento de Android Gradle 0.7. Ayer agregué la biblioteca ButterKnife de Jake Wharton en mi script de compilación de 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'
}

Cuando ejecuto la aplicación desde Android Studio, la compilación funciona bien y se ejecuta correctamente en mis dispositivos. Pero cuando lo intento (desde la línea de comandos), gradle buildla compilación falla. Aquí hay una parte de mi informe de pelusa:

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.

Quizás me falte algo, pero al no poder construir el proyecto en los bloques de terminales la posibilidad de CI para proyectos de Android.

Cualquier ayuda sería genial.

Serj Lotutovici
fuente

Respuestas:

143

Con 0.7.0 viene el soporte extendido para Lint, sin embargo, no siempre funciona correctamente. (Por ejemplo, la biblioteca de navajas)

La solución es deshabilitar la construcción de abortos en los errores de pelusa encontrados

Me inspiré en https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7

(implementación: https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/model/Default.javandroid )

(discusión: 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
  }
}

Y si necesita deshabilitar solo una regla de Lint en particular y mantener la compilación fallando en otros, use esto:

/*
 * 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
fuente
19
Si lo desea, solo puede deshabilitar la verificación del paquete condisable 'InvalidPackage'
Calin
¿Hay alguna manera de hacer esto desde root build.gradle para que no tenga que bifurcar un montón de submódulos diferentes?
ankushg
2
@AnkushGupta puedes ponerlo en el android{}bloque raíz , por supuesto
Marek Sebera
@MarekSebera ¿Eso funciona si tiene varias bibliotecas de Android y una aplicación de Android? No logré que funcionara. ¿Podría mostrarnos un ejemplo de cómo?
maduro
@riper, puede ser necesario poner el lintOptionsen las bibliotecas, pero debería funcionar si lo pone en el androidbloque raíz , intente crear una pregunta separada, si de alguna manera no funciona para usted.
Marek Sebera
53

Si abortOnError falseno resuelve su problema, puede intentar esto.

lintOptions {
    checkReleaseBuilds false
}
panwy
fuente
1
Gracias, me salvó el día al compilar con gradle-retrolambday project-lomboken el lanzamiento
Jason Sparc
37

Puede seleccionar las opciones adecuadas desde aquí

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
fuente
Si realmente quieres usar pelusa (bueno), ese es el mejor camino, creo
Cícero Moura
15

Tuve algunos errores de pelusa en Android Studio que ocurrieron solo cuando generé un APK firmado.

Para evitarlo, agregué lo siguiente a build.gradle

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

Agregue estas líneas a su archivo build.gradle:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Luego limpia tu proyecto: D

Muhamet Aljobairi
fuente
8

Si desea evitar la opción "abortInError false", eche un vistazo al archivo build / lint-results-release-fatal.html. Aquí están los errores detectados por lint.

¡Espero que esto pueda ayudar a alguien!

Daniel S.
fuente
1
De hecho, una buena sugerencia, solo una nota, no todos los errores se pueden corregir manualmente (como el paquete faltante javax.*)
Marek Sebera
4

En Android Studio v1.2, le indica cómo solucionarlo:

ingrese la descripción de la imagen aquí

Allen
fuente
3

Obtuve el mismo error en la versión 0.51 de AndroidStudio

La compilación funcionaba bien y, de repente, después de solo cambiar el valor del código de la versión, recibí un error de compilación relacionado con Lint.

Intenté cambiar build.gradle, borré la caché de AndroidStudio y reiniciaron, pero no hubo cambios.

Finalmente volví al código original (que causa el error) y retirar, y android:debuggable="false"desde AndroidManifest.xml, causando la acumulación de tener éxito.

Lo agregué de nuevo y todavía funciona ... No me preguntes por qué: S

Cedric Simon
fuente
3

En cuanto a mí, es una mala y rápida solución para tu problema:

android { 
  lintOptions { 
    abortOnError false 
  }
}

Una mejor solución es resolver el problema en su código, porque la herramienta lint comprueba los archivos fuente de su proyecto de Android en busca de posibles errores y mejoras de optimización para la corrección, seguridad, rendimiento, usabilidad, accesibilidad e internacionalización.

Este problema ocurre con mayor frecuencia cuando:

  • El diseño incluye símbolos sin resolver o falta algún atributo
  • Otros problemas estructurales, como el uso de elementos obsoletos o llamadas a la API que no son compatibles con las versiones de la API de destino, pueden provocar que el código no se ejecute correctamente.

Encuentra tus errores Inspect Codeen Android Studio: mejora tu código con Lint

Dmytro Melnychuk
fuente
1
Gracias por señalar lo contrario de una mala y rápida solución. Descubrí muchos problemas en el informe generado por lint disponible en Application/build/reports/lint-results.html. El informe es muy detallado y útil.
jgrocha
1

Añadir

android.lintOptions.abortOnError false

a su aplicación \ build.gradle

Mpak
fuente
1
Sospecho que al OP le gustaría una pequeña explicación sobre el funcionamiento de esto.
francotirador