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

Android SafeArgs配置失败求助:多种尝试仍无法解决

解决Gradle 8.7下Navigation SafeArgs插件未找到的问题

问题概述

在学习《Head First Android Development》项目时,配置Navigation SafeArgs遇到插件未找到错误。使用Gradle 8.7,尝试过切换版本、调整配置位置、清理缓存等操作无效。核心错误:

Plugin [id: 'androidx.navigation.safeargs.kotlin'] was not found in any of the following sources:

错误原因

当前配置存在三个核心问题:

  1. 混淆了项目级与模块级Gradle文件的职责,错误地在模块级dependencies中添加classpath依赖。
  2. 使用了过旧的SafeArgs版本(2.3.x),与Gradle 8.7兼容性差。
  3. 插件应用位置错误,未正确通过plugins DSL声明插件版本。

修正后的配置步骤

1. 项目级settings.gradle.kts

确保仓库配置完整,插件能从对应仓库拉取:

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "SecretMessage"
include(":app")

2. 项目级build.gradle.kts

在plugins块中声明SafeArgs插件版本(不直接应用,仅提供给模块使用):

plugins {
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.jetbrains.kotlin.android) apply false
    id("androidx.navigation.safeargs.kotlin") version "2.8.3" apply false
}

3. 模块级app/build.gradle.kts

应用SafeArgs插件,并添加匹配版本的导航依赖:

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.jetbrains.kotlin.android)
    id("androidx.navigation.safeargs.kotlin")
}

android {
    namespace = "com.example.secretmessaage"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.secretmessaage"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = 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 {
    val nav_version = "2.8.3" // 与插件版本严格一致

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    implementation(libs.androidx.activity)
    implementation(libs.androidx.constraintlayout)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    
    implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
    implementation("androidx.navigation:navigation-ui-ktx:$nav_version") // 可选,按需添加
}

关键注意事项

  • 版本匹配:SafeArgs插件版本必须与导航组件依赖版本完全一致,推荐使用最新稳定版(如2.8.3),避免2.3.x这类旧版本。
  • 插件位置:项目级仅声明插件版本(apply false),模块级才应用插件。
  • 仓库检查:确保google()、mavenCentral()、gradlePluginPortal()仓库已配置,插件从这些仓库拉取。
  • 缓存清理:执行File > Invalidate Caches... > Invalidate and Restart,然后重新同步项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:44:58