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

升级Flutter 2.28.1后CircleCI中flutter build APK仅开启SSH时成功的问题排查及Gradle参数传递疑问

解决Flutter 2.8.1在CircleCI中Gradle构建 Daemon 意外消失的问题,以及Gradle参数传递方法

一、如何给Flutter的Gradle构建传递参数

当你执行flutter build apk时,想要传递--stacktrace、--info这类Gradle参数,可以通过以下几种方式实现:

  1. 使用--gradle-option参数
    Flutter CLI支持直接通过--gradle-option将参数传递给Gradle,多次添加该参数即可传递多个选项:
flutter build apk --build-name ${CIRCLE_BUILD_NUM} --build-number ${CIRCLE_BUILD_NUM} --release -t lib/main_dev.dart --gradle-option="--stacktrace" --gradle-option="--info"
  1. 通过环境变量传递JVM参数
    如果需要调整Gradle的JVM参数,可以设置GRADLE_OPTS环境变量,比如在CircleCI的run命令中添加:
- run:
    name: Package APK
    command: |
      export GRADLE_OPTS="-Xmx2048M --stacktrace"
      echo "==> Dev Build $CIRCLE_BUILD_NUM <=="
      cd ..
      echo "$PLAY_STORE_UPLOAD_KEY" | base64 --decode > ./upload-keystore.jks
      flutter build apk --build-name ${CIRCLE_BUILD_NUM} --build-number ${CIRCLE_BUILD_NUM} --release -t lib/main_dev.dart
    environment:
      KEY_STORE_FILE: /home/circleci/workforce/upload-keystore.jks
  1. 修改项目的gradle.properties文件
    直接在项目的android/gradle.properties中添加或修改参数,比如:
org.gradle.jvmargs=-Xmx2048M --stacktrace
org.gradle.debug=true

二、排查Gradle Daemon意外消失的问题

根据你的描述,SSH连接后执行命令能成功,但正常CircleCI任务频繁失败,大概率是资源限制或环境差异导致的,以下是具体排查建议:

  • 升级CircleCI资源配置:默认的CircleCI容器内存可能不足以支撑Flutter+Gradle的构建需求。你可以在CircleCI配置中指定更大的资源类(比如medium或large),同时调整gradle.properties中的org.gradle.jvmargs内存上限,比如从-Xmx1536M提升到-Xmx2048M甚至-Xmx3072M。

  • 检查系统级OOM日志:Gradle Daemon消失很可能是被系统的OOM Killer(内存不足杀手)杀死了。你可以在SSH连接到CircleCI容器后执行dmesg命令,查看是否有out of memory相关的日志;或者在CircleCI任务的"System"标签页查看系统日志,确认是否存在内存不足的情况。

  • 临时禁用Gradle Daemon:为了验证是否是Daemon本身的问题,可以临时禁用它。在CircleCI的build命令前添加export GRADLE_OPTS="-Dorg.gradle.daemon=false",或者修改gradle.properties添加org.gradle.daemon=false,然后重新运行任务,如果不再报错,说明Daemon的运行环境有问题。

  • 对比环境变量差异:正常任务和SSH成功执行时的环境变量可能存在差异。你可以在失败的任务中添加env命令输出所有环境变量,然后和SSH连接后的env输出对比,重点检查KEY_STORE_FILE、JAVA_HOME、GRADLE_OPTS等相关变量是否一致。

  • 清理缓存:CircleCI的缓存可能存在损坏的情况,导致构建异常。尝试在build命令前添加flutter clean和rm -rf ~/.gradle/caches命令,或者在CircleCI配置中暂时禁用缓存,重新运行任务。

  • 更新Gradle版本:Flutter 2.8.1可能对Gradle版本有特定要求,尝试将项目的Gradle版本更新到Flutter推荐的稳定版。比如修改android/build.gradle中的classpath 'com.android.tools.build:gradle:7.0.4'(或对应Flutter版本的推荐版本),并更新android/gradle/wrapper/gradle-wrapper.properties中的distributionUrl到对应的Gradle版本。

  • 调整并行构建设置:如果项目开启了Gradle并行构建,可能会加剧资源消耗。可以在gradle.properties中添加org.gradle.parallel=false,关闭并行构建后测试是否解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:57:45