我正在使用 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 成功
是的,这对于 Java 管道来说非常正常。
例如,您可以像这样切换 k8s 运行器中的内存:
assembleDebug:
variables:
KUBERNETES_MEMORY_REQUEST: "6Gi"
KUBERNETES_MEMORY_LIMIT: "8Gi"