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

Android项目报错:androidx.navigation类重复问题的解决与原因分析

解决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"
    // 删除重复的基础版本依赖
}

新旧设备差异原因

  1. 依赖解析逻辑差异:新设备安装的Android Studio版本更新,依赖解析机制更严格。当遇到未定义的$nav_version变量时,会自动使用Android Studio默认的Navigation组件高版本(比如2.4.1),而你已经手动声明了2.3.5版本的-ktx依赖,导致同一库的不同版本共存,出现类重复。
  2. 缓存差异:旧设备上的项目已经缓存了符合版本要求的依赖,不会触发版本冲突;新设备是首次构建项目,重新下载依赖时解析出了版本不一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:17:37