Jetpack compose构建gitlab管道内存

问题描述 投票:0回答:1

我正在使用 jetpack compose 构建一个 Android 应用程序,并且正在使用我学校的 gitlab。运行器只有 4GB 内存,每次我的管道失败时:Gradle 构建守护进程意外消失。 android项目构建需要超过4GB内存是正常的,还是我做错了什么?

这些插件位于根 build.gradle.kts 中:

plugins {
    id("com.android.application") version "8.2.2" apply false
    id("org.jetbrains.kotlin.android") version "1.9.0" 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.0-1.0.13" 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"
    id("com.google.dagger.hilt.android")
    id("com.google.devtools.ksp")
}

这些是我使用的依赖项:

implementation("androidx.core:core-ktx:$androidCoreVersion")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:$androidxLifecycleVersion")
    implementation("androidx.activity:activity-compose:$activityComposeVersion")
    implementation(platform("androidx.compose:compose-bom:2023.10.01"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material:material")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.compose.material:material-icons-extended")
    // navigation
    implementation("androidx.navigation:navigation-compose:$navigationComposeVersion")
    // Ktor http client
    implementation("io.ktor:ktor-client-core:$ktorVersion")
    implementation("io.ktor:ktor-client-android:$ktorVersion")
    implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
    implementation("io.ktor:ktor-client-logging:$ktorVersion")
    // Dagger hilt
    implementation("com.google.dagger:hilt-android:$daggerHiltVersion")
    implementation("androidx.hilt:hilt-navigation-compose:$hiltNavigationComposeVersion")
    ksp("com.google.dagger:dagger-compiler:$daggerHiltVersion")
    ksp("com.google.dagger:hilt-compiler:$daggerHiltVersion")

    // permission
    implementation("com.google.accompanist:accompanist-permissions:$accompanistPermissionsVersion")
    // arrow kt
    implementation("io.arrow-kt:arrow-core:$arrowKtVersion")
    implementation("io.arrow-kt:arrow-fx-coroutines:$arrowKtVersion")
    // security
    implementation("androidx.security:security-crypto:$androidSecurityCryptoVersion")

    implementation("org.jetbrains.kotlinx:kotlinx-datetime:$kotlinxDatetimeVersion")

    // bonsai - for tree view
    implementation("cafe.adriel.bonsai:bonsai-core:$bonsaiVersion")

我已经尝试了 KAPT 和 KSP,没有太大区别。 我什至厌倦了从以下位置进行优化:https://developer.android.com/build/optimize-your-build

org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.configuration-cache=true
org.gradle.caching=true
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
android.enableJetifier=false

这是我的.gitlab-ci.yml

image: eclipse-temurin:17-jdk-jammy

stages:
  - build

variables:
  ANDROID_COMPILE_SDK: "34"
  ANDROID_BUILD_TOOLS: "34.0.0"
  ANDROID_SDK_TOOLS: "11076708"

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - .gradle/
    - app/build/

before_script:
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget unzip zip
  - export ANDROID_HOME="${PWD}/android-sdk-root"
  - install -d $ANDROID_HOME
  - wget --no-verbose --output-document=$ANDROID_HOME/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
  - unzip -q -d "$ANDROID_HOME/cmdline-tools" "$ANDROID_HOME/cmdline-tools.zip"
  - mv -T "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/tools"
  - export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/cmdline-tools/tools/bin
  - sdkmanager --version
  - yes | sdkmanager --licenses > /dev/null || true
  - sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}"
  - sdkmanager "platform-tools"
  - sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}"
  - chmod +x ./gradlew

assembleDebug:
  interruptible: true
  stage: build
  script:
    - ./gradlew assembleDebug
    - mv app/build/outputs/apk/debug/app-debug.apk housekeeper.apk
  artifacts:
    paths:
      - app/build/outputs/
      - housekeeper.apk
      - build/

我的项目大约有 20 个屏幕。我做错了什么还是构建需要超过 4GB 是正常的吗?而跑步者只需要更多的内存。在正常的 gitlab 上,运行程序有 8GB,pipepilne 成功

android gradle android-jetpack-compose gitlab-ci gitlab-ci-runner
1个回答
0
投票

是的,这对于 Java 管道来说非常正常。

例如,您可以像这样切换 k8s 运行器中的内存

assembleDebug:
  variables:
   KUBERNETES_MEMORY_REQUEST: "6Gi"
   KUBERNETES_MEMORY_LIMIT: "8Gi"
© www.soinside.com 2019 - 2024. All rights reserved.