如何降低Flutter Release版构建内存占用并限制CI/CD机器资源使用?
限制Flutter与CI/CD构建资源的方案
一、Flutter构建阶段的资源限制
Flutter构建依赖Gradle(Android)和Xcode(iOS),需分别针对这两个工具配置资源上限:
1. Android App Bundle构建
修改项目根目录下的 android/gradle.properties 文件,添加Gradle的内存与并行任务限制:
# 限制Gradle守护进程最大内存为4GB(预留2GB给系统及其他进程) org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m # 限制并行构建任务数量为2(匹配2个CPU核心) org.gradle.parallel=true org.gradle.workers.max=2 # 关闭非必要构建缓存,减少内存占用 org.gradle.caching=false
也可通过环境变量临时设置,执行构建时用以下命令:
export ORG_GRADLE_JVMARGS="-Xmx4g" && flutter build appbundle
2. iOS Release构建
通过环境变量限制Xcode的CPU核心使用量,结合系统命令限制内存:
# 限制Xcode仅使用2个CPU核心 export MAXIMUM_NUMBER_OF_CONCURRENT_COMPILATION_TASKS=2 # 限制进程虚拟内存为6GB(单位KB) ulimit -v 6291456 && flutter build ios --release --no-codesign
二、Fastlane阶段的资源限制
Fastlane本身资源占用较低,重点是确保其调用的Xcode/Gradle已配置资源限制,可在Fastfile中提前设置环境变量:
1. Android上传Play Store配置
lane :upload_play_store do # 提前设置Gradle内存限制 ENV['ORG_GRADLE_JVMARGS'] = '-Xmx4g' upload_to_play_store( aab: "../build/app/outputs/bundle/Release/release.aab", skip_upload_metadata: "true", skip_upload_images: "true", skip_upload_screenshots: "true", track: "internal", json_key: "./fastlane/play-store-credentials.json", ) end
2. iOS构建并上传TestFlight配置
lane :build_and_upload_testflight do # 限制Xcode并发编译任务为2个 ENV['MAXIMUM_NUMBER_OF_CONCURRENT_COMPILATION_TASKS'] = '2' # 限制进程内存为6GB sh 'ulimit -v 6291456' build_app( workspace: "Runner.xcworkspace", scheme: "Runner", export_method: "app-store", include_symbols: "true" ) upload_to_testflight( skip_submission:'true', api_key_path: "fastlane/app-store-credentials.json", skip_waiting_for_build_processing:'true' ) end
三、系统级资源限制补充
如果工具级限制仍不足以解决问题,可通过系统命令进一步约束:
- Linux/macOS:用
cpulimit限制进程CPU使用率(2核心对应200%使用率):
cpulimit -l 200 -p $(pgrep -f "flutter build") &
- macOS:用
launchctl设置全局资源上限:
launchctl limit memoryuse 6291456 6291456
额外优化建议
- 构建前执行
flutter clean、rm -rf ~/Library/Developer/Xcode/DerivedData清理缓存,释放内存与磁盘空间 - 关闭CI机器上无关的后台进程,减少系统资源占用
内容的提问来源于stack exchange,提问作者stk
相关产品推荐
相关产品推荐

