如何在kotlin-android-extensions被弃用的情况下使用@Parcelize?

121
如何将来自kotlinx.android.parcel包的annotation class Parcelize替换为不来自kotlin-android-extensions插件的@Parcelize
6个回答

229

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

如果使用Plugins 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")
}

--- OR Legacy Plugin Application ---

步骤1。升级到最新的 Kotlin 版本 - 1.4.20 并替换

<s>apply plugin: 'kotlin-android-extensions'</s>

使用此->

apply plugin: 'kotlin-parcelize'

第二步。从android {}中删除此代码。

<s>androidExtensions {
    experimental = true
}
</s>

第三步。最后,替换旧的引入 ->

<s>import kotlinx.android.parcel.Parcelize
</s>

使用新的导入

import kotlinx.parcelize.Parcelize

1
其他描述中缺少第二步,而这一步解决了我的问题,谢谢。 - Veener
project build.gradle 部分是用来做什么的?看起来好像不是必需的。 - Florian Walther
1
@FlorianWalther,“kotlin-parcelize”标识符是Kotlin Android插件的一部分。因此,您需要在类路径中拥有Kotlin Android插件。也许您使用了旧的类路径语法添加了它?或者您只有一个Android模块(应用程序模块),并且仅在其中添加了所有插件。那么您就不需要在项目build.gradle gradle中定义它。 - G00fY
@G00fY 谢谢您的澄清。我有 kotlin-android 插件,它默认添加到新项目中。 - Florian Walther
我写了一篇关于如何使用自定义@TypeParceler的文章:https://medium.com/@chrisathanas/how-to-use-parcels-on-kotlin-multiplatform-mobile-kmm-e29590816624 - RealityExpander
显示剩余2条评论

62

1
谢谢你的回答。这个 plugins {} 代码块应该放在哪里?是项目级别的 gradle 文件还是应用级别的 gradle 文件? - vepzfe
1
找到答案了。它目前在 Kotlin 稳定版本中还不可用 - https://medium.com/@drjacky/where-should-we-add-plugins-b85517b8a62f - vepzfe
@G00fY,'kotlin-parcelize'和'org.jetbrains.kotlin.plugin.parcelize'两者都对我有效。 - vepzfe
这一行是什么意思:classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"? - Vikas Pandey
请注意,kotlin-parcelize插件仅在kotlin版本1.4.20及以上版本中分离,并且在此版本以下的版本中将找不到该插件。 - guneetgstar
我有两个项目,其中一个在使用AndroidStudio 3.4时完美运行,项目构建(Gradle版本-3.4.1,ext.kotlin_version ='1.3.61')IDE kotlin插件版本为1.3.61。另一个项目出现错误,显示"kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16."。请问您能否提供任何解决方案?我已经面临了2-3周的问题。 - Mihir Lakhia

13

使用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


6
  1. kotlin-android-extensions已被弃用,应该从kotlin-parcelize进行替换
  2. 如果模型类使用了@Parcelize注释,则需要将其导入从kotlinx.android.parcel.Parcelize替换为kotlinx.parcelize.Parcelize

3

首先,您应该升级依赖版本。 然后,您应该更改一些导入以消除警告并使用正确的方式。

在我的情况下(使用macOS),只需按Command + Shift + R

找到这个:import kotlinx.android.parcel.Parcelize

替换为:import kotlinx.parcelize.Parcelize

很好,现在就对了!


0

只需更新您的导入

从:import kotlinx.android.parcel.Parcelize

到:import kotlinx.parcelize.Parcelize


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接