How to use @Parcelize now that kotlin-android-extensions is being deprecated?

AndroidKotlinAnnotationsParcelable

Android Problem Overview


How do I replace annotation class Parcelize from package kotlinx.android.parcel with Parcelize which is not coming from the kotlin-android-extensions plugin?

Android Solutions


Solution 1 - Android

This should be the new plugin: https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.parcelize

If using Plugins DSL you can use the plugin ID in submodules. Make sure that the latest Kotlin Android plugin is available from the project's classpath.

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

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

When using kts you can write ->

// 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 ---

Step 1. Update to latest kotlin version - 1.4.20 and replace

apply plugin: 'kotlin-android-extensions'
with this ->

apply plugin: 'kotlin-parcelize'

Step 2. Remove this code from the android {}

androidExtensions {
experimental = true
}

Step 3. Finally, replace old import ->

import kotlinx.android.parcel.Parcelize

with new import

import kotlinx.parcelize.Parcelize

Solution 2 - Android

First you will need to add kotlin-parcelize plugin to your module.

plugins {
    ..
    id 'kotlin-parcelize'
}

Then change your old import statement from

import kotlinx.android.parcel.Parcelize

to

import kotlinx.parcelize.Parcelize

Edit (source): https://proandroiddev.com/migrating-the-deprecated-kotlin-android-extensions-compiler-plugin-to-viewbinding-d234c691dec7

Solution 3 - Android

With Groovy

build.gradle (project level)

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 (app level)

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

and the data class

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

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

you can find the latest version here https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.parcelize

Solution 4 - Android

Just update your import

from: import kotlinx.android.parcel.Parcelize

to the: import kotlinx.parcelize.Parcelize

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvepzfeView Question on Stackoverflow
Solution 1 - AndroidG00fYView Answer on Stackoverflow
Solution 2 - AndroidA. PatrikView Answer on Stackoverflow
Solution 3 - AndroidAll Іѕ VаиітyView Answer on Stackoverflow
Solution 4 - AndroidYvgenView Answer on Stackoverflow