#android #kotlin #annotations #parcelable
#Android #kotlin #аннотации #parcelable
Вопрос:
Как мне заменить annotation class Parcelize
from package kotlinx.android.parcel
на Parcelize, который не поступает из плагина kotlin-android-extensions?
Ответ №1:
Это должен быть новый плагин: https://plugins.gradle.org/plugin/org.jetbrains .kotlin.plugin.parcelize
При использовании Plugins DSL вы можете использовать идентификатор плагина в подмодулях. Убедитесь, что последний плагин 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
Комментарии:
1. Шаг 2 отсутствовал в других описаниях и исправил мою проблему, спасибо.
2. Я новичок в разработке Android и понятия
kotlinx
не имею, ноparcelize
у него нет подмодуля (?).3. Для чего нужна эта
project build.gradle
часть? Кажется, это не обязательно4. @FlorianWalther идентификатор «kotlin-parcelize» является частью плагина Kotlin для Android. Итак, вам нужно иметь плагин Kotlin Android в вашем пути к классу. Может быть, вы добавили его со старым синтаксисом classpath? Или у вас есть один модуль Android (модуль приложения) и добавлены все плагины только там. Тогда вам не нужно определять его в вашем проекте build.gradle gradle.
5. @G00fY Спасибо за разъяснение. У меня есть
kotlin-android
плагин, который по умолчанию добавляется в новый проект.
Ответ №2:
Сначала вам нужно будет добавить 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
Комментарии:
1. Спасибо за ответ. Куда именно должен входить этот блок кода plugins {}? в файле gradle уровня проекта или в файле gradle уровня приложения?
2. нашел ответ. Он пока недоступен в текущей стабильной версии kotlin — medium.com/@drjacky/where-should-we-add-plugins-b85517b8a62f
3. @G00fY Как «kotlin-parcelize», так и «org.jetbrains. kotlin.plugin.parcelize’ работают для меня.
4. как насчет этой строки: путь к классу «org.jetbrains. kotlin:kotlin-android-extensions:$kotlin_version»
5. Пожалуйста, добавьте, что
kotlin-parcelize
плагин отделяется только после версии kotlin 1.4.20 и не будет найден ниже нее.
Ответ №3:
С помощью 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
Ответ №4:
- kotlin-android-extensions устарел, поэтому замените его на kotlin-parcelize
- Если для классов моделей используется аннотация @Parcelize, вам нужно заменить ее импорт из kotlinx.android.parcel.Parcelize для импорта kotlinx.parcelize.Parcelize
Ответ №5:
Просто обновите свой импорт
От: import kotlinx.android.parcel.Parcelize
к: import kotlinx.parcelize.Parcelize