Android多模块项目出现app与favorite循环依赖错误求助
动态模块循环依赖问题修复方案
报错信息
Circular dependency between the following tasks: :app:generateDebugFeatureTransitiveDeps +--- :app:generateDebugFeatureTransitiveDeps (*) \--- :favorite:generateDebugFeatureTransitiveDeps +--- :app:generateDebugFeatureTransitiveDeps (*) \--- :favorite:generateDebugFeatureTransitiveDeps (*)
问题根源
模块依赖出现双向循环:
app模块既通过dynamicFeatures声明:favorite为动态模块,又额外添加了implementation(project(":favorite"))依赖,主动关联动态模块favorite模块反向依赖app模块(implementation(project(":app")))
两者互相依赖导致Gradle任务执行时出现循环调用。
修复步骤
1. 调整app模块依赖配置
打开app/build.gradle.kts,移除dependencies中的implementation(project(":favorite"))——dynamicFeatures已经完成动态模块的关联,无需重复添加依赖:
dependencies { implementation(project(":core")) // 移除该行:implementation(project(":favorite")) implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation("androidx.core:core-ktx:1.12.0") // kotlin lang }
2. 调整favorite模块依赖配置
动态模块不应直接依赖app模块,推荐两种处理方式:
- 优先方案:将app中被favorite调用的公共代码迁移到
core模块,保持favorite仅依赖core - 临时方案:若必须依赖app代码,将
implementation(project(":app"))改为compileOnly(project(":app")),避免引入编译期循环依赖:
dependencies { implementation(project(":core")) // 替换为compileOnly,或直接移除(推荐移除并迁移代码到core) compileOnly(project(":app")) implementation("androidx.core:core-ktx:1.12.0") // kotlin lang }
额外优化建议
- 统一Java版本:core模块使用Java 8,而app和favorite使用Java 17,建议将core的编译配置统一为Java 17:
compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" }
- 统一Koin依赖版本:shared_dependencies中Koin版本不一致(core为3.5.3,viewmodel为2.2.3),会引发兼容性问题,修改为统一版本:
// Koin DI implementation("io.insert-koin:koin-core:3.5.3") implementation("io.insert-koin:koin-android:3.5.3") implementation("io.insert-koin:koin-androidx-viewmodel:3.5.3")
内容的提问来源于stack exchange,提问作者Muhammad Rafi
相关产品推荐
相关产品推荐

