原因:androidx.navigation.safeargs只能与androidx项目一起使用

Cause: androidx.navigation.safeargs can only be used with an androidx project

我遇到名为 safeargs 的导航组件的问题。

我在构建 gradle 中使用了 classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.0.0'

app/build.gradle 中应用插件 androidx.navigation.safeargs.kotlin 时,出现以下错误:

Cause: androidx.navigation.safeargs can only be used with an androidx project

app/build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'androidx.navigation.safeargs.kotlin'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.test.navigationexample"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha4'
    implementation 'com.google.android.material:material:1.1.0-alpha05'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.0.0'
    implementation 'androidx.navigation:navigation-ui-ktx:2.0.0'
}

根据 Migrate to AndroidX,您的 gradle.properties 文件必须包含以下行:

android.useAndroidX=true
android.enableJetifier=true

第一行 android.useAndroidX=trueandroidx.navigation.safeargs.kotlin 用来确保您使用的是 AndroidX 项目(它也被 [=19= 中的其他工具使用) ] Studio 生成正确的类,比如当你正在使用任何模板时)。

另一件要记住的事情是 apply plugin:"androidx.navigation.safeargs.kotlin" 不应该是 build.gradle 上最靠前的 apply

这行不通:

apply plugin: 'androidx.navigation.safeargs.kotlin'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

这个有效:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'androidx.navigation.safeargs.kotlin'

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0"放入您的 项目 build.gradle 在 buildscript.dependencies 部分。

但是把 apply plugin: 'androidx.navigation.safeargs' 放到你的 app build.gradle.

我认为有一个错误。如果您的问题仍然存在,您可以像这样尝试。它对我也有用。

id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'androidx.navigation.safeargs.kotlin'

如果您在 Gradle 属性文件中添加了以下行,那么没问题

android.useAndroidX=true
android.enableJetifier=true

请将此行添加到您的项目级别 build.gradle

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.5"

或当前更新版本。

解决方案

在应用程序(如果尚不存在)文件夹中创建 gradle.properties 文件,并将此示例文件的内容添加到其中。同步你的项目,它对我有用。

Example gradle.properties File

镇痛丸:)

如果你有多个模块,你必须将 classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.5" 放入项目根目录中的 build.graddle,而不是模块中的那个。然后就可以在模块中使用id "androidx.navigation.safeargs".

唯一对我有用的是。

在项目的 build.gradle 文件顶部:

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.4.2"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

在插件下的同一文件中添加:

plugins {
    ...
    id 'androidx.navigation.safeargs.kotlin' version '2.4.2' apply false
}

在模块的 build.gradle 文件中,在插件下添加:

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