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

Azure流水线执行Android单元测试生成覆盖率报告时内存溢出失败求助

Azure Android单元测试OOM问题解决方法

以下是针对单元测试执行时出现java.lang.OutOfMemoryError的具体解决措施:

  • 调整JVM堆内存参数
    在Module级别的build.gradle中,给单元测试配置更大的JVM内存:

    testOptions {
        unitTests.all {
            jvmArgs '-Xmx2048m', '-XX:MaxMetaspaceSize=512m'
        }
    }
    

    可根据流水线代理机器的内存配置,将-Xmx的值调整为3072m或更高。

  • 优化代码覆盖率统计范围
    若使用Jacoco生成覆盖率报告,排除无需统计的类(如第三方库、自动生成代码),减少内存消耗:

    jacoco {
        toolVersion = "0.8.7"
    }
    task jacocoTestReport(type: JacocoReport) {
        reports {
            xml.enabled true
            html.enabled true
        }
        sourceDirectories = files(sourceSets.main.java.srcDirs)
        classDirectories = files(sourceSets.main.output.classesDirs)
        executionData = files("$buildDir/jacoco/testDebugUnitTest.exec")
        excludes = [
            '**/R.class',
            '**/R$*.class',
            '**/BuildConfig.*',
            '**/Manifest*.*',
            '**/*Test*.*',
            '**/com/your/package/thirdparty/**' // 替换为实际第三方包路径
        ]
    }
    
  • 降低测试并行度
    减少并行执行的测试用例数量,避免内存过载:

    testOptions {
        unitTests {
            maxParallelForks = 2 // 建议设置为代理机器CPU核心数的一半
        }
    }
    
  • 清理测试资源
    在单元测试的@After方法中手动清理资源,避免内存泄漏:

    @After
    public void tearDown() {
        Picasso.get().shutdown();
        RxJavaPlugins.reset();
    }
    
  • 升级流水线代理机器规格
    若上述方法无效,更换Azure流水线使用的高内存虚拟机实例,比如从Standard_D2s_v3(8GB内存)升级至Standard_D4s_v3(16GB内存)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:10:00