我如何正确实施 safeargs?

how do i correctly implement safeargs?

我正在尝试按照教程来实施和使用房间数据库 YouTube-link。 我的问题是,我的 gradle 文件与视频中显示的文件相比看起来大不相同,以至于我不知道将 id "navigation.safeargs.kotlin"

放在哪里
classpath "androidx.navigation-safe-args-gradle-plugin:2.3.0-rc01"

或我可能需要的任何其他东西。我试了很多地方都没有用,我真的找不到答案,所以如果有人知道,请帮助我。

build.gradle(项目:...):

plugins {
        id 'com.android.application' version '7.2.0' apply false
        id 'com.android.library' version '7.2.0' apply false
        id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }

build.gradle(模块:...):

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example. ..."
        minSdk 26
        targetSdk 32
        versionCode 1
        versionName "1.0"

        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'
    }
    buildFeatures {
        viewBinding true
    }
}

dependencies {

    implementation 'androidx.exifinterface:exifinterface:1.3.3'
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.6.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
    implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    implementation fileTree(dir: "libs", include: ["*.jar"])
    // Room components
    implementation "androidx.room:room-runtime:2.4.2"
    kapt "androidx.room:room-compiler:2.4.2"
    implementation "androidx.room:room-ktx:2.4.2"
    androidTestImplementation "androidx.room:room-testing:2.4.2"

    // Lifecycle components
    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    implementation "androidx.lifecycle:lifecycle-common-java8:2.4.1"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1"

    // Kotlin components
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21"
    api "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2"
    api "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2"
}

settings.gradle(...):

    pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "..."
include ':app'

开始 straight to the source IMO

Top-level build.gradle:

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

App/module build.gradle:

plugins {
    id("androidx.navigation.safeargs")
    // or for Kotlin-only projects
    id("androidx.navigation.safeargs.kotlin")
}

因此,在您的 top-level 文件中,您需要 repositories 块中的 google() 以及 dependencies 块中的类路径。如果您没有这些块之一,只需创建它 - 它们位于 buildscript 块内,看到了吗? nav_version val 只是一个变量,因此您可以通过引用它使所有导航组件使用相同的版本,并且实际版本号仅在一个地方设置。如果你愿意,你可以只在依赖语句中写下数字 - 不过要确保所有导航组件都使用相同的版本!

id("androidx.navigation.safeargs") 行粘贴到模块的 build 文件的 plugins 块中。顺序有时对其中一些很重要,因此请在底部尝试。语法与它们在当前文件中的外观略有不同,但这只是另一种编写方式 - 都可以,您可以混合搭配

使用这个:

id 'androidx.navigation.safeargs.kotlin' version '2.4.0' apply false