You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio升级后单元测试Jacoco插桩及Robolectric错误排查

问题解答

1. IllegalStateException: Cannot process instrumented class 报错原因

这个错误是Jacoco重复插桩导致的,具体触发逻辑有两个:

  • Android Studio Arctic Fox 开始,AGP默认会对测试相关类做前置插桩,你额外添加的全局Jacoco插桩配置会对同一类执行二次插桩,导致类结构非法
  • 你项目依赖的 org.jacoco:org.jacoco.core:0.8.7 与当前使用的AGP 4.1.2自带的Jacoco版本不匹配,版本冲突也会触发插桩逻辑异常

2. Robolectric 提示have Java 1的原因

你配置的sourceCompatibility和targetCompatibility只是指定了代码编译的字节码版本,不影响Gradle测试任务运行时使用的JDK版本:

  • Android Studio Arctic Fox 默认自带JDK 11作为Gradle运行时JDK
  • 你使用的Robolectric 4.3.1版本存在JDK版本识别bug,无法正确识别JDK 11的版本号,会错误返回1的版本标识,因此抛出匹配错误

3. 修复需要补充的配置

按如下步骤调整即可解决所有问题:

调整Jacoco配置,解决重复插桩

把你现有的Jacoco配置替换为如下内容,避免二次插桩,同时对齐AGP兼容的Jacoco版本:

plugins.withId("jacoco") {
    tasks.withType(Test) { task ->
        // 仅对单元测试启用该配置,关闭全局插桩
        if (task.name.contains("UnitTest")) {
            task.jacoco.includeNoLocationClasses = true
            task.jacoco.excludes = ['jdk.internal.*']
        }
    }
}
// 移除自定义的jacoco core依赖,使用AGP自带的版本即可,或者降级为0.8.5版本与AGP4.1.2匹配

修复Robolectric版本识别问题

二选一即可:

  • 升级Robolectric版本到4.6+,该版本已修复JDK 11的识别bug:testApi "org.robolectric:robolectric:4.6"
  • 保留现有Robolectric版本的情况下,补充两个配置:
    1. 在robolectric.properties中添加一行java.version=1.8
    2. 在android配置块下添加testOptions配置:
    android {
        // 原有配置不变
        testOptions {
            unitTests.all {
                jvmArgs '-noverify'
                systemProperty 'java.version', '1.8'
            }
        }
    }
    

如果仍有问题,可以在Android Studio设置中,把Build, Execution, Deployment > Build Tools > Gradle下的Gradle JDK改为本地安装的JDK 8即可。

内容的提问来源于stack exchange,提问作者lannyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:54:07