2010-11-01 9 views
6

Sé de¿Es posible compilar simplemente una Emma instrumentado APK utilizando build.xml Android y no correr ningún pruebas

ant coverage 

obstante que hace un par de cosas, se compila con la instrumentación Emma, ​​instala y ejecuta la prueba apk. No quiero que ejecute el conjunto de pruebas a través de la cobertura porque necesito ejecutarlo con algunos ganchos adicionales, y no quiero ejecutar el conjunto de pruebas grande dos veces. Hasta ahora he probado este

Target_Project/build.properties

emma.enabled=true 

Test_Project/build.properties

emma.enabled=true 

Luego, en una concha en ejecuto esto.

Target_Project$ ant debug 
Target_Project$ adb install bin/Target_Project-debug.apk 
Target_Project$ cd ../Test_Project/ 
Test_Project$ ant debug 
Test_Project$ adb install bin/Test_Project-debug.apk 
Test_Project$ adb shell am instrument -e coverage true -e coverageFile /sdcard/myFile.ec -w com.my_app.testproject/android.test.InstrumentationTestRunner 

La respuesta es

Error: Failed to generate emma coverage. Is emma jar on classpath? 

Entonces, ¿hay un truco para conseguir el apk de construir con las librerias Emma? Intenté invocar los objetivos creados en las plantillas sdk xml pero son "privadas". ¿Hay algo que este olvidando?

Respuesta

3

Bien para cualquier persona interesada. La documentación de SDK está completamente reventada (lo que sí es sorprendente). Básicamente, usted tiene que hacer esto,

tomar el build.xml base generada por el androide crear proyectos y cambiar la etiqueta

<setup/> 

y modificarlo para que

<setup import="false"/> 

Ahora la documentación le dirá usted para copiar de SDK/platform-/templates/android_rules.xml y colocar eso en su build.xml ... ESTO ES INCORRECTO y terriblemente sin mantenimiento. Este archivo de reglas no es usado por nada. Lo que se usa son las reglas dentro de SDK/tools/ant /. Tome el archivo apropiado para su tipo de proyecto (biblioteca para un proyecto de biblioteca, prueba para un proyecto de prueba o vainilla para un proyecto regualr) con los últimos _r y
copie el contenido de su nodo raíz en su build.xml. Insértelo después de la etiqueta de configuración. Si no usa los archivos dentro del directorio ant, no podrá compilar bibliotecas de proyectos a través del script ant. Me alegré mucho de que conservaran documentación sobre cómo hacer esto.

Ahora puede cambiar lo que quiera en el archivo de compilación para que coincida con sus necesidades de compilación. En cuyo caso acabo de hacer que install-helper llame a mi envoltorio alrededor de adb, que devuelve los códigos de resultados interpretados.

+0

Gracias por la ayuda! – Justin

+0

Puedo sentir tu frustración en esto :) Sin embargo, creo que estás siendo t oo duro en el equipo de Android. Si tuviera que reconstruir su archivo build.xml a través de 'android update project .' (cuando no hay un archivo build.xml en su proyecto), vería que la documentación obsoleta a la que se refiere se ha actualizado para referirse a los nombres de archivo actuales. Si hubiera generado su build.xml desde una versión anterior del SDK, probablemente haría referencia a los archivos más antiguos que desde entonces han sido renombrados. 'android update project' no modificará build.xml si no es necesario, de ahí la documentación desactualizada. – Joe

+1

En el momento en que se escribió esta pregunta, este fue el resultado del proyecto de actualización de Android :(De ahí mi frustración. Tuve que desmantelarlo a mano. –

-1

// coverage.py

desarrollo \ TestRunner \ coverage.py

def TestDeviceCoverageSupport (ADB): "" "Compruebe si el dispositivo tiene soporte para generar métricas de cobertura de código.

Esto trata de volcar la información de ayuda de emma en el dispositivo, una respuesta que contiene información de ayuda indicará que emma ya está en la ruta de clase del sistema.

Devoluciones: Verdadero si el dispositivo puede admitir la cobertura del código. Falso de lo contrario. """ intento: salida = adb.SendShellCommand ("app_process exec/Emma -h")

if output.find('emma usage:') == 0: 
    return True 

excepto errors.AbortError: pase return false

adb shell exec app_process/eamm -h

imágenes de muñones http://duykham.blogspot.com/2009/09/how-to-get-emma-code-coverage-of.html

Cuestiones relacionadas