我想在一个多平台项目中创建一个类,并使用Parcelize
在Android版本中将其设置为Parcelable
。
因此,在我的lib-common
项目中,我尝试了:
expect annotation class Parcelize()
expect interface Parcelable
@Parcelize
data class Foo(x: Int): Parcelable
以及在我的lib-android
项目中:
actual typealias Parcelize = kotlinx.android.parcel.Parcelize
actual typealias Parcelable = android.os.Parcelable
第一个问题是Gradle插件kotlin-android-extensions
似乎没有纳入lib-android
的{{1}},因此找不到软件包build.gradle
。我设法通过直接导入库来解决此问题:
kotlinx.android.parcel
以此编译implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
的{{1}}定义。
但是,我从actual
的定义中得到了一个错误,好像没有正确地用Parcelable
进行注释:
类
中定义的抽象成员Foo
不是抽象的,并且没有实现@Parcelize
Foo
。
答案 0 :(得分:8)
这有点令人尴尬,但是我发现问题仅是因为我忘记打开kotlin-android-extensions
的实验功能,其中之一是@Parcelize
...
因此,要使其正常工作,就可以像问题中那样保留我对expected
和actual
的{{1}}和Parcelable
的定义,并编辑{{1} }的Parcelize
并添加以下几行:
lib-android
不需要添加build.gradle
;那是死路一条。
答案 1 :(得分:6)
由于 Google 弃用了 android-kotlin-extensions
插件,您应该使用 kotlin-parcelize
插件
apply plugin: 'kotlin-parcelize'