Android使用SafeArgs实现导航时Gradle报错找不到nav_version属性如何解决?
报错原因说明
你遇到的报错核心原因是:Gradle配置中多处使用了$nav_version变量,但根目录build.gradle的全局变量声明块中没有定义该变量,和Java/Kotlin混用无直接关联,此前移除Kotlin配置后仍报错就是因为没有解决变量未定义的核心问题。
解决步骤
1. 补充全局版本变量
在根目录build.gradle的buildscript下的ext块中声明nav_version变量,取值和你当前使用的导航组件版本保持一致即可。
2. 清理冗余Kotlin配置
因为你已不需要Kotlin相关配置,可同步移除所有Kotlin相关代码避免冗余:
- 根目录
build.gradle移除Kotlin插件依赖、kotlin_version变量 - 模块级
build.gradle移除Kotlin插件声明、kotlinOptions配置块、所有Kotlin专属依赖 - 全Java项目可更换SafeArgs插件为Java专属版本,直接生成Java类更适配
3. 同步Gradle配置
修改完成后同步项目即可解决报错。
修改后完整配置文件
根目录build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { nav_version = "2.3.5" } repositories { google() jcenter() } dependencies { classpath "com.android.tools.build:gradle:4.1.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
模块级build.gradle
plugins { id 'com.android.application' } apply plugin: "androidx.navigation.safeargs.java" android { compileSdkVersion 30 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.nikhiljain.canvasdrawingsample" minSdkVersion 21 targetSdkVersion 30 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 } } dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }
内容的提问来源于stack exchange,提问作者VanessaF
相关产品推荐
相关产品推荐

