jacoco.gradle 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. apply plugin: 'jacoco'
  2. jacoco {
  3. toolVersion = "$jacoco_version"
  4. }
  5. // Force Jacoco Version
  6. subprojects {
  7. configurations.all {
  8. resolutionStrategy {
  9. eachDependency { details ->
  10. if ('org.jacoco' == details.requested.group) {
  11. details.useVersion "$jacocoVersion"
  12. }
  13. }
  14. }
  15. }
  16. }
  17. project.afterEvaluate { project ->
  18. tasks.withType(Test) {
  19. jacoco.includeNoLocationClasses = true
  20. jacoco.excludes = ['jdk.internal.*']
  21. }
  22. final flavor = "Gplay"
  23. final buildType = "Debug"
  24. final variant = "$flavor${buildType.capitalize()}"
  25. final taskName = "jacocoTest${variant.capitalize()}UnitTestReport"
  26. task "$taskName"(type: JacocoReport, dependsOn: "test${variant.capitalize()}UnitTest") {
  27. reports {
  28. csv.required = Boolean.FALSE
  29. xml.required = Boolean.TRUE
  30. html.required = Boolean.TRUE
  31. }
  32. final fileFilter = [
  33. // data binding
  34. '**/databinding/*',
  35. 'android/databinding/**/*.class',
  36. '**/android/databinding/*Binding.class',
  37. '**/android/databinding/*',
  38. '**/androidx/databinding/*',
  39. '**/BR.*',
  40. // android
  41. '**/R.class',
  42. '**/R$*.class',
  43. '**/BuildConfig.*',
  44. '**/Manifest*.*',
  45. '**/*Test*.*',
  46. 'android/**/*.*',
  47. // kotlin
  48. '**/*MapperImpl*.*',
  49. '**/*$ViewInjector*.*',
  50. '**/*$ViewBinder*.*',
  51. '**/BuildConfig.*',
  52. '**/*Component*.*',
  53. '**/*BR*.*',
  54. '**/Manifest*.*',
  55. '**/*$Lambda$*.*',
  56. '**/*Companion*.*',
  57. '**/*Module*.*',
  58. '**/*Dagger*.*',
  59. '**/*Hilt*.*',
  60. '**/*MembersInjector*.*',
  61. '**/*_MembersInjector.class',
  62. '**/*_Factory*.*',
  63. '**/*_Provide*Factory*.*',
  64. '**/*Extensions*.*',
  65. // sealed and data classes
  66. '**/*$Result.*',
  67. '**/*$Result$*.*',
  68. // adapters generated by moshi
  69. '**/*JsonAdapter.*',
  70. // Hilt
  71. '**/*Module.kt',
  72. '**/di/**',
  73. 'dagger.hilt.internal/*',
  74. 'hilt_aggregated_deps/*',
  75. '**/*$Result.*', /* filtering `sealed` and `data` classes */
  76. '**/*$Result$*.*',/* filtering `sealed` and `data` classes */
  77. '**/*Args*.*', /* filtering Navigation Component generated classes */
  78. '**/*Directions*.*', /* filtering Navigation Component generated classes */
  79. '**/*inlined*.class', /* filtering inlined classes */
  80. '**/composables/**'
  81. /* INSERT ANY OTHER JUNK YOU WANT FILTERED OUT HERE */
  82. ]
  83. final androidKotlinTree = fileTree(dir: "${project.buildDir}/tmp/kotlin-classes/${variant}", excludes: fileFilter)
  84. final kotlinTree = fileTree(dir: "${project.buildDir}/classes/kotlin/main", excludes: fileFilter)
  85. final javacTree = fileTree(dir: "${project.buildDir}/intermediates/javac/${variant}/classes", excludes: fileFilter)
  86. final mainSrc = "${project.projectDir}/src/main/java"
  87. final productFlavorSrc = "${project.projectDir}/src/${flavor}/java"
  88. final buildTypeSrc = "${project.projectDir}/src/${buildType}/java"
  89. sourceDirectories.setFrom files([mainSrc, productFlavorSrc, buildTypeSrc])
  90. classDirectories.setFrom files([androidKotlinTree, kotlinTree, javacTree])
  91. executionData.setFrom fileTree(dir: project.buildDir, includes: [
  92. "jacoco/test${variant.capitalize()}UnitTest.exec",
  93. "outputs/unit_test_code_coverage/${variant}UnitTest/test${variant.capitalize()}UnitTest.exec",
  94. ])
  95. }
  96. }