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
相关产品推荐
相关产品推荐

