Hoy actualicé las dependencias de Gradle y Kotlin en Android Studio.
Las nuevas versiones son estas:
kotlin_version = "1.5.10" ... jacoco { toolVersion = "0.8.6" } ... distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zipLa tarea de informe de cobertura de prueba falla con el siguiente error:
2021-05-27T16:57:49.150+0200 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':consumerkit:testDebugUnitTestCoverage'. 2021-05-27T16:57:49.304+0200 [DEBUG] [org.codehaus.groovy.vmplugin.VMPluginFactory] Trying to create VM plugin `org.codehaus.groovy.vmplugin.v9.Java9` by checking `java.lang.Module`, but failed: java.lang.ClassNotFoundException: java.lang.Module at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.codehaus.groovy.vmplugin.VMPluginFactory.lambda$createPlugin$0(VMPluginFactory.java:61) at java.security.AccessController.doPrivileged(Native Method)ya tenia el
jacoco { toolVersion = "0.8.7" }configurado pero no estaba funcionando de todos modos, lo que solucionó el problema fue seguir este comentario aquí
build.gradle , vuelva a cambiar a: android { //.... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } }no se preocupe, no romperá nada si aún no estaba usando las características del lenguaje Java 11, AGP 7 sigue siendo compatible con JDK 8 como objetivo.
allprojects en el archivo root build.gradle , agregue esto: allprojects { //... other things // workaround to fix an auto-import of a lower Jacoco version resolutionStrategy { eachDependency { details -> if ('org.jacoco' == details.requested.group) { details.useVersion "0.8.7" } } } }y ahora debería funcionar usando:
AGP 7.0.X Kotlin 1.5.X JDK 11 (embedded with AS)Para Kotlin 1.5 , debe usar JaCoCo 0.8.7 en lugar de 0.8.6 ; consulte https://github.com/jacoco/jacoco/pull/1164 y el registro de cambios completo en https://www.jacoco.org/jacoco/trunk /doc/cambios.html
Fragmento de ejemplo:
// build.gradle or build.gradle.kts jacoco { toolVersion = "0.8.7" }simplemente haciendo
jacoco { toolVersion = "0.8.7" } no fue suficiente para mí. También tuve que anular la versión que estaba usando Android para que la dependencia androidJacocoAnt también use 0.8.7. ( ./gradlew app:dependencies ) Simplemente agregue esto a su gradle también
android.jacoco.version = "0.8.7"Es un hilo bastante antiguo, pero estas soluciones no resolvieron mis problemas por completo en el proyecto de Android (en realidad está escrito en Java, no en Kotlin), por lo que agregaré mis soluciones aquí. Tal vez alguien lo encuentre útil.
Excepto por actualizar jacoco toolVersion a 0.8.7 , también tuve que actualizar los datos de ejecución en mi configuración de jacoco de la siguiente manera:
project.afterEvaluate { tasks.create(name: "${unitTestTask}Coverage", type: JacocoReport, dependsOn: [ "$unitTestTask", ":sdk:testDebugUnitTest", ":sdk:connectedCheck" ]) { /* all jacoco custom configuration goes here... */ executionData(fileTree(dir: "$buildDir", includes: [ "jacoco/testDebugUnitTest.exec", "outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec", "outputs/code_coverage/debugAndroidTest/connected/*coverage.ec" ])) } }en esta configuración tuve que agregar la siguiente línea:
"outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec" que no estaba allí antes porque el archivo con el informe generado utilizado por el sonar se generó en la nueva ubicación. El informe se genera con la tarea de testDebugUnitTestCoverage . Después de todo eso, puedo generar un informe de cobertura de prueba que incluye pruebas de Android conectadas/instrumentadas y pruebas unitarias regulares en Java a través de sonar.