我想在一个多平台项目中创建一个类,并使用 Parcelize 为了成功 Parcelable 在Android版本中。
Parcelize
Parcelable
所以在我的 lib-common 项目,我试过:
lib-common
expect annotation class Parcelize() expect interface Parcelable @Parcelize data class Foo(x: Int): Parcelable
在我的 lib-android 项目:
lib-android
actual typealias Parcelize = kotlinx.android.parcel.Parcelize actual typealias Parcelable = android.os.Parcelable
第一个问题是gradle插件 kotlin-android-extensions 似乎没有接受 Lib安卓 的 build.gradle ,所以包裹 kotlinx.android.parcel 找不到。我通过直接导入库来解决这个问题:
kotlin-android-extensions
Lib安卓
build.gradle
kotlinx.android.parcel
implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
有了这个, actual 定义 包裹的 编译。
actual
包裹的
但是,我从定义 Foo ,好像没有正确地用 @Parcelize 以下内容:
Foo
@Parcelize
等级 福 不是抽象的,并且不实现抽象成员 public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit 定义在 android.os.Parcelable
福
public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit
android.os.Parcelable
好吧,这有点尴尬,但我发现问题很简单,因为我忘了打开 kotlin-android-extensions ,其中之一是 @Parcelize …
所以为了让它工作,它足够让我 expected 和 actual 定义 Parcelable 和 Parcelize 如问题所述,并编辑 lib-android 的 build.gradle 并添加以下行:
expected
apply plugin: 'kotlin-android-extensions' androidExtensions { experimental = true }
不 dependencies 需要补充;这是一个死胡同。
dependencies