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

如何让KMM的linkPodFramework系列Gradle任务并行执行?

KMM构建优化:iOS框架链接任务并行执行

核心问题分析

你遇到的linkPodFrameworkIosArm64、linkPodFrameworkIosX64、linkPodFrameworkIosSimulatorArm64任务串行单核心执行的问题,是因为KMM Cocoapods插件默认给这些任务添加了不必要的顺序依赖,同时LLVM链接器默认未启用多线程。以下是具体解决方法:


1. 让多架构链接任务并行执行

通过Gradle任务配置,移除不同架构链接任务之间的顺序依赖,允许它们并行运行(linkPodFrameworkIosFat必须等三个架构任务完成,无法并行)。

在build.gradle.kts的kotlin代码块外添加:

tasks.withType<org.jetbrains.kotlin.gradle.tasks.AbstractLinkTask>().configureEach {
    val validLinkTasks = listOf("linkPodFrameworkIosArm64", "linkPodFrameworkIosX64", "linkPodFrameworkIosSimulatorArm64")
    if (name in validLinkTasks) {
        // 移除与其他架构链接任务的依赖,仅保留对应架构的编译任务依赖
        dependsOn.removeAll { task ->
            task is org.jetbrains.kotlin.gradle.tasks.AbstractLinkTask && task.name in validLinkTasks && task != this
        }
    }
}

2. 启用LLVM链接器多线程

让单个链接任务利用多核心执行,大幅缩短单任务耗时。在kotlin块的targets配置中添加:

kotlin {
    // ... 原有配置
    
    targets.withType<KotlinNativeTarget>().configureEach {
        binaries.all {
            // 让LLVM链接器使用全部可用核心,也可以指定具体数量如"-Xlinker -jobs=8"
            linkerOpts.add("-Xlinker -jobs")
        }
    }
    
    // ... 原有配置
}

3. 调整Gradle并行参数

在gradle.properties中增加以下配置,提升Gradle并行执行能力:

# 根据CPU核心数设置,M1建议设为8,旧款i7建议设为4-6
org.gradle.workers.max=8
# 允许Gradle在配置阶段并行处理项目
org.gradle.parallel.in-project=true

4. 额外优化建议

  • 升级依赖版本:将Kotlin版本升级到1.9.20+,Ktor、Realm等依赖同步升级到对应兼容版本,新版本对KMM构建性能有显著优化。
  • 调整JVM内存:将org.gradle.jvmargs的-Xmx提升到4096M(M1)或3072M(旧款i7),避免内存不足导致的构建卡顿:
    org.gradle.jvmargs=-Xmx4096M -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options="-Xmx4096M" -XX:+UseParallelGC
    
  • 启用Kotlin Native缓存:添加kotlin.native.cacheKind=both到gradle.properties,缓存Native编译结果。

内容的提问来源于stack exchange,提问作者Vladimír Šimek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:47:12