如何在Jacoco代码覆盖率报告中排除databinding相关包?
配置失效原因
原有配置存在两个核心问题:
- 在testOptions的jacoco块内同时对
classDirectories做了两次赋值,后一次赋值会直接覆盖afterEvaluate中配置的规则 - 仅配置单元测试运行时的jacoco路径没有作用于Jacoco报告生成任务,报告生成时仍然会读取全量类文件
正确配置方案
先移除原有testOptions中重复的classDirectories相关配置,在模块级build.gradle中按如下规则配置:
// 顶部引入jacoco插件 apply plugin: 'jacoco' android { // 保留其他原有安卓配置 testOptions { unitTests.all { jacoco { includeNoLocationClasses = true } } } } // 统一配置所有Jacoco任务的排除规则 tasks.withType(Test) { jacoco.excludes += ['**/*databinding/**', '**/BR.*', '**/DataBinderMapperImpl.*'] } tasks.withType(JacocoReport) { afterEvaluate { // 排除databinding相关类文件 classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: [ '**/*databinding/**/*.*', '**/BR.*', '**/*BindingImpl.*', '**/DataBinderMapper*.*' ]) })) // 可选:排除报告中展示的databinding生成源码 sourceDirectories.setFrom(files(sourceDirectories.files.collect { fileTree(dir: it, exclude: '**/*databinding/**/*.*') })) } }
验证步骤
配置完成后先执行./gradlew clean清理项目缓存,再重新运行Jacoco报告生成任务即可。
内容的提问来源于stack exchange,提问作者Mikhail
相关产品推荐
相关产品推荐

