Gradle: ¿Qué es un valor de salida distinto de cero y cómo lo soluciono?

Estoy desarrollando una aplicación para Android, y cada vez que la ejecuto, recibo este mensaje:

:module:someTask FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':module:someTask'. > some message here... finished with non-zero exit value X * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: Y.ZZ secs 

Ya he intentado limpiar y construir el proyecto, pero el error persiste.

He visto respuestas que dicen que para habilitar Multidex o boost el tamaño del montón, pero estoy seguro de que no necesito ninguna solución.

¿Qué puedo hacer para resolver esto?


Acerca de esta pregunta: esta es una extensión directa de ¿Qué es un seguimiento de stack ?, y ¿cómo puedo usarlo para depurar mis errores de aplicación? excepto que está mirando un rastro de stack de Gradle en lugar de un rastro de stack de Java.

Prefacio

Ese mensaje de error no es suficiente información para diagnosticar el problema. Hay formas de obtener más información , y eso debe ser inspeccionado primero.

La salida de Gradle en sí debe señalar el error real en las pocas líneas encima de ese mensaje entre :module:someTask FAILED y el último :module:someOtherTask . Por lo tanto, si hace una pregunta sobre su error, edite sus preguntas para incluir más contexto al error.

El problema

La parte someTask de la app:someTask FAILED es muy importante ya que te dice exactamente qué paso del proceso de comstackción se ha bloqueado.

Estos pasos incluyen la preparación de dependencias, la generación y fusión de los activos y los archivos de recursos, la comprobación del código para detectar errores y la comstackción, y finalmente la instalación de la aplicación.

Si en algún momento del proceso de comstackción Gradle detecta una anomalía, arrojará un valor de salida distinto de cero indicando que se ha producido un error.

El valor de salida en sí es algo importante.

  • 1 es solo un código de error general y el error es probable en la salida de Gradle
  • 2 parece estar relacionado con la superposición de dependencias o la configuración incorrecta del proyecto.
  • 3 parece ser por incluir demasiadas dependencias o un problema de memoria.

Probablemente haya otros, así que siéntase libre de proporcionar sus propios comentarios o respuestas con otros valores.

La solución

Las soluciones generales para lo anterior (después de intentar una Limpieza y Reconstrucción del proyecto) son:

  • 1 – Abordar el error que se menciona. En general, este es un error en tiempo de comstackción , lo que significa que algún fragmento de código en su proyecto no es válido. Esto incluye tanto XML como Java para un proyecto de Android. Consulte la imagen de todas las cosas que entran en la aplicación

proceso gradle

  • 2 y 3 : muchas respuestas aquí te dicen que habilites multidex . Si bien puede solucionar el problema, lo más probable es que sea una solución . Si no entiende por qué lo está usando (vea el enlace), probablemente no lo necesite.

Si no puede encontrar ningún resultado de error en el registro de Gradle, entonces el curso de acción recomendado sería abrir la ventana de Gradle de Android Studio.

Android Studio Gradle

Abra la carpeta Tasks para cada módulo y realice una combinación de los siguientes.

  • Para limpiar y restablecer el código de los archivos generados, use build > clean seguido de build > build .
  • Para inspeccionar dependencias anidadas, use help > dependencies . Asegúrate de que ninguno esté duplicado.
  • Para verificar si su código contiene errores de syntax y advertencias, ejecute verification > lint . Esto generará un archivo HTML que puede leer en su navegador. Los registros de Gradle dirán el Wrote HTML report to file:///path/to/app/build/outputs/lint-results.html , así que simplemente abra ese archivo para ver todos los errores y advertencias.
  • Para intentar ejecutar la aplicación en un dispositivo, use install > installDebug .

Notas adicionales

He visto muchas publicaciones con valor 2 al instalar Android Studio y aparece un error

‘android-studio / jre / bin / java’ finalizó con un valor de salida distinto de cero 2

La instalación de Java JDK y la configuración correcta de Android Studio para usar el JDK parecen solucionar este problema.


Si está utilizando los servicios de Google Play compile 'com.google.android.gms:play-services:XYZ' , solo incluya las dependencias que realmente necesita , de lo contrario, es muy probable que llegue al límite de Multidex. Vea cómo habilitarlo .


Si tiene una línea en su archivo Gradle que lee compile fileTree(dir: 'libs', include: ['*.jar']) , entonces no necesita ninguna otra línea que tenga compile files('libs/some_file.jar') porque la primera forma dice “incluir todos los archivos JAR en el directorio libs/ “.

Junto con ese punto, si está usando Gradle y puede encontrar las dependencias que le gustaría usar buscando en el Repositorio de Maven , se recomienda encarecidamente usarlo en lugar de colocar los archivos JAR manualmente en el directorio libs/ . Para cada biblioteca en ese sitio, hay una pestaña de Gradle y solo necesita copiar esa línea y colocar la compile copy compile en la sección de dependencies .


Si tiene una línea que comstack otro proyecto como compile project(":project_name") , entonces asegúrese de no estar duplicando dependencias desde allí.


Otra solución para problemas relacionados con la memoria consiste en expandir el tamaño de build.gradle dynamic, que se realiza desde build.gradle como tal

 android { // Other stuffs dexOptions { javaMaxHeapSize "2g" // or "4g" if your device has enough memory } } 

Un valor de salida distinto de cero es como una luz de control del motor. Simplemente te dice que algo salió mal. Aún necesita hacer más diagnósticos para descubrir cuál es exactamente el problema. Para comenzar, debe desplazarse hacia arriba en la salida de Gradle y ver si hay algo más que proporcione detalles más específicos sobre lo que salió mal.