¿Cómo puedo solucionar este ZipException mientras compilaba un proyecto de Android en Jenkins?

Recientemente he actualizado el SDK de Android en la máquina de Jenkins a rev15 de rev13, y tuve que rehacer algunas de nuestras cosas de compilación personalizadas en build.xml para encajar con los cambios realizados en rev14. Trabajé esto en mi estación de trabajo, y lo revisé esperando que todo fuera peachy. En su lugar, la generación falla con el error siguiente:

 -obfuscate: -dex: [dex] Converting compiled files and external libraries into /export/home/hudson/jobs/path/to/the/file/classes.dex... [dx] [dx] UNEXPECTED TOP-LEVEL EXCEPTION: [dx] java.util.zip.ZipException: error in opening zip file [dx] at java.util.zip.ZipFile.open(Native Method) [dx] at java.util.zip.ZipFile.<init>(ZipFile.java:127) [dx] at java.util.zip.ZipFile.<init>(ZipFile.java:143) [dx] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:206) [dx] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) [dx] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) [dx] at com.android.dx.command.dexer.Main.processOne(Main.java:418) [dx] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329) [dx] at com.android.dx.command.dexer.Main.run(Main.java:206) [dx] at com.android.dx.command.dexer.Main.main(Main.java:174) [dx] at com.android.dx.command.Main.main(Main.java:95) [dx] 1 error; aborting BUILD FAILED /opt/android-sdk-linux/tools/ant/build.xml:729: The following error occurred while executing this line: /opt/android-sdk-linux/tools/ant/build.xml:731: The following error occurred while executing this line: /opt/android-sdk-linux/tools/ant/build.xml:743: The following error occurred while executing this line: /opt/android-sdk-linux/tools/ant/build.xml:249: null returned: 1 

Puedo construir con éxito el proyecto ejecutando la ant como el usuario de Jenkins directamente en el directorio del espacio de trabajo de Jenkins con el mismo androide SDK, hormiga, y JDK que Jenkins está utilizando. Incluso cortar y pegar la línea de ejecución fuera de la Jenkins registro para asegurarse de que todos los mandos e interruptores se establecen el mismo. Así que es algo acerca de cómo Jenkins está ejecutando la compilación que es el problema.

Jenkins había volcado el entorno como un "shell exec" paso de la construcción, y veo que la variable LD_LIBRARY_PATH está establecida.

 LD_LIBRARY_PATH=/u0/jdk1.6.0_29/jre/lib/i386/server:/u0/jdk1.6.0_29/jre/lib/i386:/u0/jdk1.6.0_29/jre/../lib/i386 

Establecer este valor en mi terminal mientras se ejecuta la compilación desde el shell, y falla de la misma manera que cuando Jenkins ejecuta las cosas. Ah ah

El problema es que no puedo averiguar cómo mantener la variable LD_LIBRARY_PATH de establecer, o apuntando a algo que no causará este problema. No está establecido en el entorno del usuario de Jenkins, y no puedo encontrar nada que pueda ser una referencia a él en la configuración de Jenkins. El valor que estableció cambió cuando instalé un JDK actualizado y actualizé el valor de JAVA en /etc/defaults/jenkins por lo que está claramente relacionado, pero desafortunadamente, el comportamiento no mejoró ninguno.

Estoy sin ideas. ¿Alguna ayuda?

El problema resultó ser que debido a alguna complicación de configuración involucrada en hacer uso de la característica de construcción de matriz Jenkins (una característica muy agradable, por cierto) que una biblioteca no estaba poniendo su archivo classes.jar donde el proyecto padre esperaba Encontrarlo, causando el error reportado. Eso era básicamente un "archivo no encontrado" que no lo dice. Todavía no estamos seguros de qué (si algo?) El LD_LIBRARY_PATH tenía que ver con él.

Mi colega modificó el archivo build.xml para el proyecto principal y la biblioteca para convenir con más fuerza en dónde los archivos de salida van a terminar, y ahora todo funciona de nuevo, mucho para nuestro alivio.

Yo tuve el mismo problema. Estaba construyendo sobre Jenkins y el tarro estaba siendo copiado en librerías incorrectamente.

Estoy usando el Jenkins Copy Artifacts Plugin para tomar un frasco de biblioteca común y copiarlo en libs /. Conseguí el error cuando no utilicé la opción "Flatten Directories". Una vez que acabo de tener el tarro en el directorio de libs todo estaba de vuelta a la normalidad.

Esperemos que esto salve a alguien el dolor de cabeza!

  • Permitir que inestable Android Gradle construye en Jenkins
  • Configuración de la biblioteca de soporte de Android con maven
  • Cómo generar informes de prueba de JUnit en android para jenkins
  • Construir proyecto android desde jenkins bajo linux - build falla, no puede encontrar importado build.xml
  • Artefacto de correo electrónico de Jenkins para cada compilación
  • Integre Calabash en jenkins android
  • ConnectedAndroidTest en varios emuladores
  • Cómo configurar la versión de la aplicación de Android por número de construir en Jenkins?
  • Robolectric visible () "W / InputEventReceiver: Se ha intentado consumir eventos de entrada agrupados pero el receptor de eventos de entrada ya se ha eliminado."
  • Construye el trabajo de Android con connectedInstrumentTest que no funciona en Jenkins
  • Utilice tanto InstrumentationTestRunner como AndroidJUnitRunner con Robotium y Espresso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.