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

KMM生成AAR后嵌套依赖缺失,无法导入共享类及第三方库

问题分析与解决方案

核心原因:AAR默认不包含依赖项

AAR本质是Android库的编译产物归档,默认不会将依赖的模块(如KMM共享模块)或第三方库(koin、coil、ktor)打包进去,只会在生成的pom.xml文件中声明这些依赖关系。但当你直接将AAR放在主项目的libs目录下引入时,Gradle不会自动读取AAR附带的pom文件,因此这些依赖不会被自动引入主项目,导致共享模块类无法导入、第三方库类找不到(如coil.compose.SingletonAsyncImageKt的ClassNotFoundException)。

而你单独添加共享模块AAR时能正常导入,是因为此时主项目直接依赖了共享模块的代码,没有经过Android库模块的中转。


解决方案

1. 发布KMM库到Maven仓库(推荐)

这是最规范的方式,能让Gradle自动解析所有依赖:

  • 在KMM项目的Android模块和共享模块的build.gradle.kts中添加maven-publish插件:
    plugins {
        // ... 其他插件
        `maven-publish`
    }
    
  • 配置发布内容,以Android模块为例:
    publishing {
        publications {
            create<MavenPublication>("release") {
                from(components["release"])
                groupId = "com.yourgroup"
                artifactId = "kmm-library"
                version = "1.0.0"
            }
        }
        repositories {
            mavenLocal() // 发布到本地Maven仓库
            // 也可以配置远程Maven仓库,如私有仓库等
        }
    }
    
  • 执行命令发布到本地仓库:
    ./gradlew publishToMavenLocal
    
  • 在主项目的build.gradle.kts中引入本地Maven依赖:
    repositories {
        mavenLocal()
        // ... 其他仓库
    }
    
    dependencies {
        implementation("com.yourgroup:kmm-library:1.0.0")
    }
    
    这样Gradle会自动下载KMM库的所有依赖(包括共享模块、koin、coil等)。

2. 使用Fat-AAR插件打包所有依赖

如果不想发布到仓库,可以用插件将依赖合并到AAR中:

  • 在KMM Android模块的build.gradle.kts中引入fat-aar插件:
    plugins {
        id("com.android.library")
        id("com.kezong.fat-aar") version "1.3.8"
        // ... 其他KMM相关插件
    }
    
  • 配置需要合并的依赖,将共享模块和第三方依赖标记为embed:
    dependencies {
        // 嵌入共享模块
        embed(project(":shared"))
        // 嵌入第三方依赖
        embed("io.insert-koin:koin-android:3.4.0")
        embed("io.coil-kt:coil-compose:2.4.0")
        embed("io.ktor:ktor-client-android:2.3.3")
        // ... 其他需要嵌入的依赖
    }
    
  • 重新执行./gradlew assembleRelease生成包含所有依赖的AAR,再导入主项目即可。

3. 手动添加缺失依赖(不推荐)

如果临时测试用,可以手动在主项目中添加所有缺失的依赖:

  • 将KMM共享模块的AAR也放到主项目的libs目录
  • 在主项目的build.gradle.kts中添加:
    dependencies {
        implementation(files("libs/kmm-android-library.aar"))
        implementation(files("libs/kmm-shared-library.aar"))
        // 添加第三方依赖
        implementation("io.insert-koin:koin-android:3.4.0")
        implementation("io.coil-kt:coil-compose:2.4.0")
        implementation("io.ktor:ktor-client-android:2.3.3")
        // ... 其他KMM库依赖的第三方库
    }
    
    这种方式容易遗漏依赖,且后续KMM库更新时需要同步修改主项目依赖,维护成本高。

额外确认点

确保KMM Android模块已正确转为库:

  • 将插件从com.android.application改为com.android.library
  • 移除defaultConfig中的applicationId配置

内容的提问来源于stack exchange,提问作者PRATHIV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:55:12