android - 我正在尝试使用安全参数,但是当我将依赖项添加到项目级别 build.gradle

plugins {
   id 'com.android.application' version '7.2.1' apply false
   id 'com.android.library' version '7.2.1' apply false
   id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
}
dependencies {
   "android.arch.navigation:navigation-safe-args-gradle-plugin:$version_navigation"
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

原因:groovy.lang.MissingPropertyException:无法为类型为 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler 的对象获取未知属性“version_navigation”。

最佳答案

您不能在项目模块build.gradleroot 中使用dependencies block 。正确的方法是在其中添加 buildscript block 和 dependencies ,如下所示:

buildscript {
    dependencies {
        classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.5.1'
    }
}

plugins {
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

请记住,您还可以选择遵循新的结构模式,而不是使用 dependency block ,您可以使用 plugins block :

plugins {
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
    id 'androidx.navigation.safeargs' version '2.5.1' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app 模块build.gradle 中,它保持原样。

plugins {
    // ...
    id 'androidx.navigation.safeargs.kotlin'
}

您必须确保库的依赖项遵循相同的版本以避免出现问题。
当您需要多个 gradle 文件中的版本时,为了方便此版本控制,您还可以在 buildscript 中包含一个 ext block build.gradle 来自 project module 的版本,并使用它代替 gradle 文件中的版本号。完整示例:

build.gradle(项目)

buildscript {
    ext {
        navigation_ver = '2.5.1'
    }

    // if you want the 'old' way:
    // dependencies {
        // classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_ver"
    // }
}

plugins {
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
    // if you want the 'new' way:
    id 'androidx.navigation.safeargs' version "$navigation_ver" apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(应用模块)

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'androidx.navigation.safeargs.kotlin'
}

android {
    // ...
}

dependencies {
    // ...
    implementation "androidx.navigation:navigation-ui-ktx:$navigation_ver"
    implementation "androidx.navigation:navigation-fragment-ktx:$navigation_ver"
}

关于android - 我正在尝试使用安全参数,但是当我将依赖项添加到项目级别 build.gradle 时,它​​给了我这个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73206597/

相关文章:

perl - 为什么 Scalar::Util::Numeric 安装不正确?

.net - 不可变对象(immutable对象)的约定

regex - 字符串末尾的正则表达式 _#

ruby - Rails 将数组合并为数组的数组

asp.net - 在 .net 中,是否有与 Server.HTMLEncode() 相反的函数?

r - 如何提取R中的第一个字符串

php - 在创建 PHP 类实例时运行代码?

perl - 如何将 Data::Dumper 输出转换回 Perl 数据结构?

sql - 如何在 SQL Server 2005 数据库中使用 T-SQL 用零填充 NVARCH

python - Julia 代码没有完成而 Python 代码完成了