@在多平台项目中打包

时间:2018-07-14 05:27:13

标签: android kotlin parcelable kotlin-android-extensions kotlin-multiplatform

我想在一个多平台项目中创建一个类,并使用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

2 个答案:

答案 0 :(得分:8)

这有点令人尴尬,但是我发现问题仅是因为我忘记打开kotlin-android-extensions的实验功能,其中之一是@Parcelize ...

因此,要使其正常工作,就可以像问题中那样保留我对expectedactual的{​​{1}}和Parcelable的定义,并编辑{{1} }的Parcelize并添加以下几行:

lib-android

不需要添加build.gradle;那是死路一条。

答案 1 :(得分:6)

由于 Google 弃用了 android-kotlin-extensions 插件,您应该使用 kotlin-parcelize 插件

apply plugin: 'kotlin-parcelize'

Source