La construcción de un proyecto de prueba Android con Jenkins falla debido a un error subyacente

Cuando intento construir un proyecto de prueba de Android en Jenkins recibo el mensaje de error siguiente:

BUILD FAILED C:\Progra~1\android-sdk\tools\ant\build.xml:444: The following error occurred while executing this line: C:\Progra~1\android-sdk\tools\ant\build.xml:444: subant task calling its own parent target. 

Esto parece de alguna manera ser un problema conocido ( https://code.google.com/p/android/issues/detail?id=21108 , https://wiki.jenkins-ci.org/pages/viewpage.action?pageId = 58917193 ). Como se informó, la cuestión debería haber sido arreglado, pero todavía me enfrento con el problema descrito.

Estoy ejecutando Jenkins en un servidor de Windows, tienen las últimas herramientas de Android instalado (SDK herramientas v22.0.1, plataforma y herramientas de construcción v17) y utilizando Ant 1.9.0 ..

La estructura del proyecto es:

  • Proyecto A
  • Proyecto de prueba para el proyecto A

Creé un trabajo de construcción dedicado en Jenkins para ambos. Los archivos build.xml para ambos proyectos se han creado con el comando "android update" (como se describe en las especificaciones de Android). Así que ambos están haciendo referencia a la build.xml de la carpeta android-sdk / tools / ant. Haciendo referencia a las especificaciones de Apache Ant para subant ( http://ant.apache.org/manual/Tasks/subant.html ) esto podría ser la fuente del fracaso ?!

Esta tarea no debe utilizarse fuera de un destino si invoca el mismo archivo de compilación del que forma parte.

¿Alguno de ustedes ha tenido problemas similares? ¿Alguna idea de cómo resolverlo?

Gracias de antemano por tu ayuda.

"Como se informó, el problema debería haber sido arreglado, pero todavía estoy enfrentando el problema descrito."

El problema al que se refiere ( problema 21108: probar proyecto de biblioteca roto con SDK Tools r14 ) no está fijo. Esto es similar al problema 21304: "ant debug installt" debería funcionar para proyectos de prueba. Que no será fijo.

Aquí está la solución de Joe Bowbeer :

  1. Eliminar tested.project.dir de ant.properties

  2. Agregue el objetivo de las run-tests de build.xml a build.xml :

     <!-- SDK Tools r15 workaround --> <property name="tested.manifest.package" value="com.example.test" /> <target name="run-tests"> <echo>Running tests...</echo> <exec executable="${adb}" failonerror="true"> <arg line="${adb.device.arg}" /> <arg value="shell" /> <arg value="am" /> <arg value="instrument" /> <arg value="-w" /> <arg value="${tested.manifest.package}/${test.runner}" /> </exec> 

  3. Ejecutar pruebas utilizando la línea de comandos:

     $ ant debug install run-tests 

En otras palabras, si utilizas un único destino de instalación, necesitas cambiarlo.

Después de un par de horas de investigación finalmente encontré una solución!

Siempre me preguntaba por qué era capaz de construirlo localmente en mi máquina, pero no con Jenkins o incluso con ANT de la línea de comandos en el servidor remoto donde Jenkins se ejecuta. . Así que en lugar de ejecutar ANT con …

 ant -Dsdk.dir=<YOUR SDK DIR> -Dtested.project.dir=<PATH TO YOUR PROJECT UNDER TEST> clean debug install test 

Establecer la propiedad tested.project.dir dentro del archivo ant.properties a la ruta correcta en el servidor y comprobar esto en el repositorio de código fuente. Entonces quité la propiedad de la lista de argumentos para ANT en Jenkins, de modo que Jenkins ahora sólo ejecuta

 ant -Dsdk.dir=<YOUR SDK DIR> clean debug install test 

Y finalmente funciona.

(Por supuesto, es genarally no es una buena práctica para comprobar información de ruta específica en el repositorio.Pero finalmente está funcionando …)

  • ¿Cómo puedo realizar mis pruebas independientes de Robotium UI en paralelo?
  • Cobertura de código de Android en Jenkins CI
  • Ejecute pruebas de unidad android y pruebas de instrumentación en Jenkins (Gradle)
  • Cómo configurar la versión de la aplicación de Android por número de construir en Jenkins?
  • "Unknown-sdk" dispositivo al ejecutar pruebas 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."
  • Jenkins And Android Construir
  • Android: Colaboración de la interfaz de usuario (Jenkins + Spoon +?)
  • Crashlytics: Usando el servidor de compilación para hacer una versión y cargar la distribución de una aplicación para Android
  • La construcción de Jenkins falló debido a la falta de SDK de Android
  • Jenkins no puede resolver com.android.tools.build:gradle:3.0.0-alpha8
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.