Android Studio中KMM项目偶发Unresolved reference编译问题求助
KMM项目偶发
:androidApp:compileDebugKotlin任务"Unresolved reference"错误问题 执行:androidApp:compileDebugKotlin任务时,Android Studio偶发无法找到已存在的部分导入,出现**"Unresolved reference"**错误,该问题并非持续出现,属于间歇性触发。
项目级build.gradle
plugins { alias(libs.plugins.androidApplication).apply(false) alias(libs.plugins.androidLibrary).apply(false) alias(libs.plugins.kotlinAndroid).apply(false) alias(libs.plugins.kotlinMultiplatform).apply(false) alias(libs.plugins.kotlinCocoapods).apply(false) alias(libs.plugins.kotlinPluginSerialization).apply(false) alias(libs.plugins.sqldelight).apply(false) id("com.google.gms.google-services") version "4.4.0" apply false id("com.google.firebase.crashlytics") version "2.9.9" apply false }
app模块build.gradle
plugins { alias(libs.plugins.androidApplication) alias(libs.plugins.kotlinAndroid) id("com.google.gms.google-services") id("com.google.firebase.crashlytics") alias(libs.plugins.kotlinPluginSerialization) } android { namespace = "..." compileSdk = libs.versions.targetSdk.get().toInt() defaultConfig { applicationId = "..." minSdk = libs.versions.minSdk.get().toInt() targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 12 versionName = "1.0" signingConfigs { create("release") { storeFile = ... storePassword = "..." keyAlias = "..." keyPassword = "..." } } } buildFeatures { buildConfig = true viewBinding = true compose = true } composeOptions { kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } buildTypes { getByName("debug") { applicationIdSuffix = ".debug" versionNameSuffix = ".debug" isMinifyEnabled = false isDebuggable = true isShrinkResources = false } getByName("release") { isMinifyEnabled = true isDebuggable = false isShrinkResources = false signingConfig = signingConfigs.getByName("release") proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } } dependencies { implementation(projects.shared) implementation(libs.compose.ui) implementation(libs.compose.ui.tooling.preview) implementation(libs.compose.material3) implementation(libs.androidx.activity.compose) implementation(libs.kotlinx.serialization.json) debugImplementation(libs.compose.ui.tooling) // jetpack nav implementation(libs.androidx.navigation.fragment.ktx) implementation(libs.androidx.navigation.ui.ktx) // firebase implementation(platform("com.google.firebase:firebase-bom:32.8.0")) implementation("com.google.firebase:firebase-analytics") implementation("com.google.firebase:firebase-auth") implementation("com.google.firebase:firebase-crashlytics") // google services implementation(libs.play.services.auth) implementation(libs.androidx.core.splashscreen) // material implementation(libs.material) implementation(libs.androidx.material.icons.extended) // koin implementation(libs.koin.androidx.compose) implementation(libs.koin.android) // kotlin tools implementation(libs.kotlinx.serialization.json) // coil implementation(libs.coil.compose) // constraint implementation(libs.androidx.constraintlayout.compose) // google ads implementation(libs.play.services.ads) implementation(libs.androidx.ui.viewbinding) // play review implementation(libs.google.play.review) implementation(libs.google.play.review.ktx) }
shared模块build.gradle
plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinCocoapods) alias(libs.plugins.androidLibrary) alias(libs.plugins.kotlinPluginSerialization) alias(libs.plugins.sqldelight) } kotlin { androidTarget { compilations.all { kotlinOptions { jvmTarget = "17" } } } // iosX64() // iosArm64() iosSimulatorArm64() cocoapods { summary = "Some description for the Shared Module" homepage = "Link to the Shared Module homepage" version = "1.0" ios.deploymentTarget = "16.0" podfile = project.file("../iosApp/Podfile") framework { baseName = "shared" isStatic = true } } sourceSets { commonMain.dependencies { implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.serialization.json) implementation(libs.kotlinx.datetime) implementation(libs.koin.core) api(libs.napier) implementation(libs.bundles.firebase) implementation(libs.ktor.client.core) implementation(libs.ktor.client.logging) implementation(libs.ktor.client.serialization) implementation(libs.ktor.client.content.negotiation) // implementation("org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose:2.8.0-alpha01") } androidMain.dependencies { implementation(libs.ktor.client.okhttp) implementation(libs.sqldelight.android.driver) implementation("com.google.firebase:firebase-analytics:21.5.1") api("com.onesignal:OneSignal:[5.0.0, 5.99.99]") } iosMain.dependencies { implementation(libs.ktor.client.darwin) implementation(libs.sqldelight.native.driver) } commonTest.dependencies { implementation(libs.kotlin.test) } } } android { namespace = "com.jobsapps.theoracle" compileSdk = libs.versions.targetSdk.get().toInt() defaultConfig { minSdk = libs.versions.minSdk.get().toInt() } buildFeatures { buildConfig = true } buildTypes { debug { isMinifyEnabled = false isShrinkResources = false } release { isMinifyEnabled = true isShrinkResources = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } } sqldelight { databases { create("Database") { packageName.set("...") } } }
已尝试的解决方法
- 清理项目,删除gradle和.idea目录并重新同步
可行排查与解决步骤
- 深度清理构建缓存:执行命令
./gradlew cleanBuildCache清理Gradle构建缓存,再执行./gradlew :shared:assembleDebug优先编译shared模块,最后编译androidApp模块 - 校验插件版本兼容性:检查
libs.versions.toml中kotlinMultiplatform和Android Gradle Plugin(AGP)的版本是否匹配,避免版本不兼容导致的同步异常 - 调整依赖解析顺序:在app模块的
dependencies中,将implementation(projects.shared)移至依赖列表最顶部,确保shared模块优先被解析 - 修复第三方库版本冲突:shared模块androidMain中直接依赖的
com.google.firebase:firebase-analytics:21.5.1与app模块通过BOM引入的版本可能冲突,改为依赖BOM统一管理,移除shared模块中的硬编码版本 - 重建IDE索引:在Android Studio中执行
File -> Invalidate Caches... -> Invalidate and Restart,彻底重建项目索引,解决索引损坏导致的偶发引用问题 - 临时禁用增量编译:在
gradle.properties中添加org.gradle.caching=false和kotlin.incremental=false,若问题消失则说明增量缓存存在异常,后续可清理缓存后重新开启
内容的提问来源于stack exchange,提问作者Salim İsler
相关产品推荐
相关产品推荐

