¿Cómo obtengo un informe de cobertura de jacoco con Android gradle plugin 0.10.0 o superior?

Estoy tratando de obtener un informe de cobertura de prueba usando el complemento Gradle Android 0.10.2. Pero aún no puedo obtener un informe de cobertura después de ejecutar algunas pruebas. (connectedAndroidTest).

mi build.gradle de mi módulo principal es:

apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.3" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { debug { testCoverageEnabled true } release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' } 

y la sección de buildscript del build gradle del proyecto es:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.10.+' } } 

Una vez que ejecuto un gradlew connectedAndroidTest desde la terminal, puedo encontrar la carpeta de coverage-instrumented-classes y la carpeta de code-coverage dentro de la carpeta de build . Pero no puedo encontrar la carpeta de coverage en la carpeta de reports . (Solo que puedo ver es la carpeta androidTests )

¿Hay algo que falta para obtener un informe de cobertura de Jacobo?

Durante los cientos de veces que busqué la respuesta para obtener un informe de cobertura, finalmente encontré una respuesta exacta de lo que quería.

Desde la publicación de este blog , descubrí que gradlew createDebugCoverageReport crea el informe de cobertura de jacoco.

Además, desde el código fuente del complemento gradle, el complemento usa jacoco 0.6.2.201302030002 de manera predeterminada. (por lo tanto, no se requiere la definición de la versión de jacoco si va a utilizar una versión predeterminada)

En resumen, los pasos ESENCIALES para obtener un informe de cobertura de jacoco con el complemento gradle de Android son:

  1. Android gradle plugin versión 0.10.0 o superior (normalmente en build.gradle su proyecto)
  2. agregue testCoverageEnabled true al tipo de comstackción que desea (es decir, debug )
  3. ejecutar $ gradlew createDebugCoverageReport o gradlew connectedCheck para obtener un informe de cobertura de jacoco .

Puede encontrar su informe de cobertura en build/reports/coverage/{buildType} . (es decir, build/reports/coverage/debug para la comstackción de depuración)

(Agregar un caso de sabores múltiples del comentario de @ odiggity)

Si su proyecto utiliza una configuración de sabores múltiples, use create{flavorName}CoverageReport lugar. El informe de cobertura se generará en build/reports/coverage/{flavorName}/{buildType} .

Ejemplo para flavor krInternal con tipo de comstackción de depuración :

  • Comando: ./gradlew createKrInternalDebugCoverageReport
  • El informe se genara en: build/reports/coverage/krInternal/debug

Propina :

Como solo puede obtener un informe de cobertura con el emulator y el device with root permission , obtendrá el siguiente error después de ejecutar un comando en el dispositivo normal (no rooteado):

 05:48:33 E/Device: Error during Sync: Permission denied java.io.IOException: com.android.ddmlib.SyncException: Permission denied at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:114) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:158) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:42) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:695) Caused by: com.android.ddmlib.SyncException: Permission denied at com.android.ddmlib.SyncService.doPullFile(SyncService.java:511) at com.android.ddmlib.SyncService.pullFile(SyncService.java:320) at com.android.ddmlib.Device.pullFile(Device.java:849) at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:107) ... 10 more :myDirections:connectedAndroidTest FAILED FAILURE: Build failed with an exception. 

Tengo que agregar una respuesta en lugar de un comentario ya que mi reputación es inferior a 50 …

Lo que quiero complementar es:

Google lanzó nuevas herramientas de comstackción para solucionar el desagradable problema “VerifyError” ( enlace ).

Intente cambiar su configuración en gradle para usar las últimas herramientas de comstackción si encuentra el problema “VerifyError”. Por ejemplo,

 android { ...... buildToolsVersion '21.1.1' ..... } 

Dado que las herramientas de comstackción 21.0.0 tienen errores, utilice una versión mayor que 21.0.0. Yo uso 21.1.1.