Azure DevOps Pipeline中Gradle构建报Java heap space错误如何解决
解决方案
1. 优先修改项目内Gradle全局配置
Gradle任务的JVM参数优先级为:项目内android/gradle.properties配置 > Pipeline任务传入的gradleOptions,你之前修改Pipeline任务参数不生效大概率是被项目配置覆盖了。
打开项目下的android/gradle.properties文件,找到org.gradle.jvmargs配置项,调整为更大的内存:
# 原配置可能类似如下 # org.gradle.jvmargs=-Xmx1024m -XX:MaxMetaspaceSize=256m # 修改为更大的内存,macOS代理默认提供14G内存,可以放心调整到4G以上 org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
2. 为出问题的Bundle签名任务单独配置JVM参数
signProductionReleaseBundle任务使用独立的Worker进程执行,部分版本的Android Gradle Plugin不会继承全局JVM参数,需要单独为该任务配置内存:
打开项目下的android/app/build.gradle,添加如下配置:
android { // 原有配置保持不变 // 新增以下配置 tasks.whenTaskAdded { task -> if (task.name == 'signProductionReleaseBundle') { task.jvmArgs = ['-Xmx4096m'] } } }
3. 拆分多端构建任务
你当前使用macos-latest镜像同时构建iOS和Android,如果两个构建任务放在同一个Job里执行,先执行的iOS构建会占用大量内存,后续Android构建可用内存不足就会触发OOM。建议将iOS和Android构建拆分为两个独立的Job,并行执行,每个Job可以独占代理的全部内存资源。
4. 升级Gradle任务版本与AGP版本
- 你当前使用的
Gradle@2是比较旧的任务版本,建议替换为Gradle@3,新版本对JVM参数的传递处理更稳定 - 如果近期升级过Android Gradle Plugin(AGP)版本,部分旧版本AGP存在BundleTool内存泄漏的已知问题,建议升级到AGP的最新稳定版,或者回退到之前可以正常构建的版本。
5. 验证参数是否生效
可以在Gradle构建任务前加一步参数校验,确认配置的JVM参数已生效:
- bash: | cd MyApp/android ./gradlew properties | grep org.gradle.jvmargs displayName: 校验Gradle JVM参数
内容的提问来源于stack exchange,提问作者twiz
相关产品推荐
相关产品推荐

