JaCoCo执行测试报initializationError FAILED SDK版本不兼容错误
问题原因
报错核心是当前项目引入的Robolectric测试框架版本最高仅支持到SDK 31(Android 12),但myLibModule模块配置的targetSdkVersion为32(Android 12L)。Robolectric在初始化单元测试运行环境时会校验目标SDK版本是否在支持范围内,检测到目标SDK超过当前版本支持的最大上限后,直接在DefaultSdkPicker层抛出IllegalArgumentException,导致testDebugUnitTest任务执行失败,后续JaCoCo覆盖率统计流程随构建终止。
控制台输出的Configuration on demand is an incubating feature是Gradle按需配置功能的常规孵化提示,和本次报错无关,无需额外处理。当前使用的JaCoCo 0.8.7版本也不是故障诱因,不需要调整。
修复方案
根据项目实际情况选择以下任意一种方案即可:
- 升级Robolectric版本(推荐)
将单元测试依赖中的Robolectric版本升级至4.8.1及以上,该版本开始正式支持SDK 32,升级后无需修改现有targetSdkVersion配置,重新执行./gradlew jacocoCoverage命令即可正常完成覆盖率统计。 - 指定Robolectric测试运行SDK版本
如果暂时无法升级Robolectric,可以在模块build.gradle中添加配置,强制Robolectric使用SDK 31环境运行单元测试,绕过版本校验,配置代码如下:
注意:如果测试用例中调用了SDK 32新增的专属API,该配置下运行测试会抛出方法不存在异常。android { // 原有compileSdkVersion、buildToolsVersion、defaultConfig配置保持不变 testOptions { unitTests.all { systemProperty "robolectric.sdk", "31" } } } - 临时下调targetSdkVersion
非紧急情况不推荐该方案:将模块defaultConfig中的targetSdkVersion从32下调至31,待后续完成Robolectric版本升级后再改回原配置,该方案会影响正式构建产物的目标SDK配置,侵入性较高。
内容的提问来源于stack exchange,提问作者Ralf Wickum
相关产品推荐
相关产品推荐

