ChatGPT解决这个技术问题 Extra ChatGPT

既然 kotlin-android-extensions 已被弃用,如何使用 @Parcelize?

如何将 package kotlinx.android.parcel 中的 annotation class Parcelize 替换为不是来自 kotlin-android-extensions 插件的 Parcelize?


G
G00fY

这应该是新插件:https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.parcelize

如果使用插件 DSL,您可以在子模块中使用插件 ID。确保项目的类路径中提供了最新的 Kotlin Android 插件。

// project build.gradle
plugins {
    ..
    id "org.jetbrains.kotlin.android" version "1.4.20" apply false
}

// app build.gradle
plugins {
    ..
    id 'kotlin-parcelize'
}

使用 kts 时,您可以编写 ->

// project build.gradle.kts
plugins {
    ..
    kotlin("android") version "1.4.20" apply false
}

// app build.gradle.kts
plugins {
    ..
    id("kotlin-parcelize")
}

--- 或旧插件应用程序 ---

第 1 步。更新到最新的 kotlin 版本 - 1.4.20 并替换

apply plugin: 'kotlin-android-extensions'

有了这个->

apply plugin: 'kotlin-parcelize'

步骤 2. 从 android {} 中删除此代码

androidExtensions {
    experimental = true
}

步骤 3. 最后,替换旧的导入 ->

import kotlinx.android.parcel.Parcelize

新进口

import kotlinx.parcelize.Parcelize

其他描述中缺少第 2 步并解决了我的问题,谢谢。
我是 android 开发新手,不知道,但 kotlinx 没有 parcelize 子模块(?)。
project build.gradle 部分是做什么用的?似乎没有必要
@FlorianWalther “kotlin-parcelize”标识符是 Kotlin Android 插件的一部分。所以你需要在你的类路径中有 Kotlin Android 插件。也许您已经使用旧的类路径语法添加了它?或者你有一个 Android 模块(app 模块)并且只在那里添加了所有插件。那么你就不需要在你的项目build.gradle gradle中定义它了。
@G00fY 感谢您的澄清。我有默认添加到新项目的 kotlin-android 插件。
A
A. Patrik

首先,您需要将 kotlin-parcelize 插件添加到您的模块中。

plugins {
    ..
    id 'kotlin-parcelize'
}

然后将旧的导入语句从

import kotlinx.android.parcel.Parcelize

import kotlinx.parcelize.Parcelize

编辑(来源):https://proandroiddev.com/migrating-the-deprecated-kotlin-android-extensions-compiler-plugin-to-viewbinding-d234c691dec7


感谢你的回答。这个 plugins {} 代码块到底应该放在哪里?在项目级 gradle 文件或应用程序级 gradle 文件中?
找到了答案。它在当前的 kotlin 稳定版本中尚不可用 - medium.com/@drjacky/where-should-we-add-plugins-b85517b8a62f
@G00fY 'kotlin-parcelize' 和 'org.jetbrains.kotlin.plugin.parcelize' 都为我工作。
这一行怎么样:类路径“org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version”
请补充一下,kotlin-parcelize 插件仅在 kotlin 版本 1.4.20 之后才分离,不会在其下方找到。
A
All Іѕ Vаиітy

使用 Groovy

build.gradle(项目级别)

dependencies {
    // .... project level dependencies
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files

    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20-RC"
}

build.gradle(应用级)

plugins {
    ...
    id 'kotlin-parcelize'
}

和数据类

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
class User(
    val firstName: String, 
    val lastName: String, 
    val age: Int
): Parcelable

您可以在此处找到最新版本https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.parcelize


S
Sibtain Raza

kotlin-android-extensions 已弃用,因此请从 kotlin-parcelize 替换它


Y
Yvgen

只需更新您的导入

来自:import kotlinx.android.parcel.Parcelize

到:import kotlinx.parcelize.Parcelize