Android Studio添加commonMain依赖后文件夹停止索引问题
问题
我正在开发适配Android与iOS端的Kotlin多平台共享代码模块,遇到如下异常:当我向commonMain源集添加任意依赖项后,Android Studio会停止索引commonMain文件夹;移除新增的依赖项后,索引功能即可恢复正常。尝试执行gradlew clean命令清理构建缓存后问题仍未解决。
当前build.gradle.kts配置如下:
object Versions { const val coroutinesVersion = "1.5.0-native-mt" const val ktorVersion = "1.6.1" const val kotlinVersion = "1.5.21" const val serializationVersion = "1.2.2" } plugins { kotlin("multiplatform") kotlin("native.cocoapods") id("com.android.library") kotlin("plugin.serialization") } version = "1.0" kotlin { android() sourceSets { val commonMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutinesVersion}") implementation("io.ktor:ktor-client-core:${Versions.ktorVersion}") implementation("io.ktor:ktor-client-serialization:${Versions.ktorVersion}") implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:${Versions.serializationVersion}") } } val commonTest by getting { dependencies { implementation(kotlin("test")) } } val androidMain by getting { dependencies { implementation("io.ktor:ktor-client-android:${Versions.ktorVersion}") } } val androidTest by getting } } android { compileSdk = 32 sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") defaultConfig { minSdk = 21 targetSdk = 32 } }
模块结构参考:
解决方案
该问题由三类配置错误共同导致,按以下步骤修复即可:
修正版本不匹配问题
当前配置存在多处版本对齐问题,是IDE索引崩溃的核心原因:- 声明了
kotlinVersion变量但未在plugins块指定版本,Gradle会拉取和当前版本不兼容的Kotlin插件 - kotlinx-serialization 1.2.2、kotlinx-coroutines 1.5.0-native-mt、Ktor 1.6.1均与Kotlin 1.5.21存在已知的IDE索引兼容bug
- 启用了cocoapods插件但未声明iOS目标,也没有补全cocoapods的必要配置,导致依赖解析阶段IDE抛出异常终止索引
首先替换Versions配置为1.5.x分支下经过兼容验证的版本组合:
- 声明了
object Versions { const val coroutinesVersion = "1.5.2-native-mt" const val ktorVersion = "1.6.8" const val kotlinVersion = "1.5.31" const val serializationVersion = "1.3.3" const val agpVersion = "7.0.4" }
然后修改plugins块强制指定所有插件的对齐版本:
plugins { kotlin("multiplatform") version Versions.kotlinVersion kotlin("native.cocoapods") version Versions.kotlinVersion id("com.android.library") version Versions.agpVersion kotlin("plugin.serialization") version Versions.kotlinVersion }
- 补全缺失的多平台目标配置
在kotlin配置块中补全iOS目标与cocoapods必要配置,否则cocoapods插件会中断依赖解析:
kotlin { android() // 按需选择iOS目标架构,以下为通用全架构配置 iosX64() iosArm64() iosSimulatorArm64() cocoapods { summary = "KMP shared module" homepage = "local" ios.deploymentTarget = "13.0" framework { baseName = "shared" } } // 原有sourceSets配置保持不变 sourceSets { // 原有源集依赖配置无需修改 } }
- 清除缓存重建索引
不要只执行Gradle clean,需要彻底清除IDE缓存:- 关闭Android Studio
- 删除项目根目录下的
.idea文件夹、.gradle缓存文件夹 - 重新打开项目,等待Gradle同步完成后,IDE会自动重建commonMain的索引
- 验证修复结果
执行./gradlew :<你的模块名>:dependencies命令,确认commonMain下所有依赖无版本冲突、解析正常即可。
内容的提问来源于stack exchange,提问作者Pavel Kolesnikov
相关产品推荐
相关产品推荐

