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

Jetpack Compose项目GitLab CI构建因内存不足失败排查

问题分析与解决方案

对于包含Jetpack Compose、Dagger Hilt、KSP这类工具的中型Android项目(20个页面),4GB内存的GitLab Runner确实容易出现内存不足导致的Gradle构建守护进程崩溃问题,但通过针对性的配置优化,仍有机会让构建在4GB环境下完成。以下是具体分析和优化建议:

核心原因

Android构建流程中,Gradle守护进程、Kotlin编译器、Compose编译器、KSP注解处理器会同时占用大量内存。当Runner总内存仅4GB时,系统内核、SDK下载/解压进程、缓存进程等会进一步挤占可用空间,最终导致Gradle守护因OOM被系统强制终止,也就是你遇到的“Gradle build daemon disappeared unexpectedly”错误。

针对性优化配置

1. 调整Gradle内存参数,避免内存耗尽

当前你设置的org.gradle.jvmargs=-Xmx4g会让Gradle尝试占用全部4GB内存,但系统和其他进程需要预留空间,建议降低内存上限并优化GC策略:

# gradle.properties
org.gradle.jvmargs=-Xmx2560m -Dfile.encoding=UTF-8 -XX:+UseG1GC -XX:MaxMetaspaceSize=768m -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.configuration-cache=true
org.gradle.caching=true
# 限制并行任务数,避免多任务抢占内存
org.gradle.workers.max=2
# 单独配置守护进程的JVM参数(可选)
org.gradle.daemon.jvmargs=-Xmx2048m -XX:+UseG1GC -XX:MaxMetaspaceSize=512m

2. 优化GitLab CI构建流程

  • 减少SDK重复下载:将Android SDK目录加入缓存,避免每次构建都下载解压SDK占用内存和时间:
    cache:
      key: ${CI_COMMIT_REF_SLUG}
      paths:
        - .gradle/
        - app/build/
        - android-sdk-root/
    
  • 跳过不必要的任务:如果构建Debug包不需要SonarQube分析,在CI脚本中跳过该任务:
    assembleDebug:
      script:
        - ./gradlew assembleDebug -x sonarqube
        # ... 其他步骤
    
  • 禁用Gradle守护(极端情况):如果守护进程仍频繁崩溃,可以尝试直接运行Gradle而不使用守护:
    script:
      - ./gradlew assembleDebug --no-daemon -x sonarqube
    

3. 统一插件与依赖版本,降低构建开销

  • 你当前Kotlin插件版本不统一(根目录1.9.0,app模块序列化插件1.9.22),版本不一致会增加编译开销,建议统一为同一稳定版本:
    // 根目录build.gradle.kts
    plugins {
        id("com.android.application") version "8.2.2" apply false
        id("org.jetbrains.kotlin.android") version "1.9.22" apply false
        id("org.sonarqube") version "4.4.1.3373"
        id("com.google.dagger.hilt.android") version "2.50" apply false
        id("com.google.devtools.ksp") version "1.9.22-1.0.17" apply false
    }
    
    // app/build.gradle.kts
    plugins {
        id("com.android.application")
        id("org.jetbrains.kotlin.android")
        id("org.jetbrains.kotlin.plugin.serialization") version "1.9.22"
        // ... 其他插件
    }
    
  • 移除冗余依赖:如果项目主要使用Material3,可以移除androidx.compose.material:material依赖,减少编译任务量。

4. 其他优化细节

  • 使用Android Gradle Plugin最新稳定版(如8.4.x),新版本通常包含内存优化和性能提升;
  • 确保android.nonTransitiveRClass=true和android.enableJetifier=false保持开启,这两个配置已经能有效减少构建开销;
  • 定期清理CI缓存,避免缓存中积累过多无效文件占用空间。

总结

4GB内存对于带Compose、Hilt的中型项目来说确实处于临界值,即使通过优化勉强运行,后续项目迭代增加代码或依赖后仍可能再次出现问题。如果条件允许,8GB内存的Runner是更稳定的选择;若只能使用4GB环境,上述优化配置可以大幅提升构建成功率。

内容的提问来源于stack exchange,提问作者Tomáš Rys

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:30:02