Android项目报错:androidx.navigation类重复问题的解决与原因分析
问题描述
我有一个Android Studio项目,在旧设备上运行正常,但在新设备安装Android Studio后,使用模拟器运行时出现大量androidx.navigation相关类重复的编译错误,需获取解决方法并了解新旧设备出现差异的原因。
错误日志
Duplicate class androidx.navigation.ActivityKt found in modules navigation-runtime-2.4.1-runtime (androidx.navigation:navigation-runtime:2.4.1) and navigation-runtime-ktx-2.3.5-runtime (androidx.navigation:navigation-runtime-ktx:2.3.5) Duplicate class androidx.navigation.ActivityNavArgsLazyKt found in modules navigation-runtime-2.4.1-runtime (androidx.navigation:navigation-runtime:2.4.1) and navigation-runtime-ktx-2.3.5-runtime (androidx.navigation:navigation-runtime-ktx:2.3.5) ...(其余重复类错误略)
项目build.gradle文件
plugins { id 'com.android.application' id 'kotlin-android' } apply plugin: "androidx.navigation.safeargs" android { compileSdkVersion 31 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.example.game" minSdkVersion 24 targetSdkVersion 31 versionCode 1 versionName "1.0" viewBinding { enabled = true } testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } dependencies { implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation "androidx.constraintlayout:constraintlayout:2.1.3" implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' implementation 'androidx.navigation:navigation-ui-ktx:2.3.5' implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" }
解决方法
步骤1:移除重复依赖
你的dependencies块中重复声明了Navigation组件的依赖:既添加了固定版本2.3.5的-ktx版本依赖,又添加了未定义版本变量$nav_version的基础版本依赖。直接删除最后两行重复的基础版本依赖即可:
// 删除以下两行 implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version"
步骤2:统一版本(可选优化)
如果希望后续更方便管理版本,可以在build.gradle顶部添加版本变量定义,确保所有Navigation组件依赖版本一致:
plugins { id 'com.android.application' id 'kotlin-android' } // 添加版本变量定义 ext { nav_version = "2.3.5" } apply plugin: "androidx.navigation.safeargs" // ... 其余代码不变 dependencies { // ... 其余依赖不变 implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" // 删除重复的基础版本依赖 }
新旧设备差异原因
- 依赖解析逻辑差异:新设备安装的Android Studio版本更新,依赖解析机制更严格。当遇到未定义的
$nav_version变量时,会自动使用Android Studio默认的Navigation组件高版本(比如2.4.1),而你已经手动声明了2.3.5版本的-ktx依赖,导致同一库的不同版本共存,出现类重复。 - 缓存差异:旧设备上的项目已经缓存了符合版本要求的依赖,不会触发版本冲突;新设备是首次构建项目,重新下载依赖时解析出了版本不一致的问题。
内容的提问来源于stack exchange,提问作者VanessaF
相关产品推荐
相关产品推荐

