Android @多平台项目中的软件包化

Android @多平台项目中的软件包化,android,kotlin,parcelable,kotlin-android-extensions,kotlin-multiplatform,Android,Kotlin,Parcelable,Kotlin Android Extensions,Kotlin Multiplatform,我想在多平台项目中创建一个类,并在Android版本中使用Parcelize使其Parcelable 因此,在我的lib common项目中,我尝试: expect annotation class Parcelize() expect interface Parcelable @Parcelize data class Foo(x: Int): Parcelable 在我的libandroid项目中: actual typealias Parcelize = kotlinx.android

我想在多平台项目中创建一个类,并在Android版本中使用
Parcelize
使其
Parcelable

因此,在我的
lib common
项目中,我尝试:

expect annotation class Parcelize()
expect interface Parcelable

@Parcelize
data class Foo(x: Int): Parcelable
在我的
libandroid
项目中:

actual typealias Parcelize = kotlinx.android.parcel.Parcelize
actual typealias Parcelable = android.os.Parcelable
第一个问题是Gradle插件
kotlin android extensions
似乎没有接受
lib android
build.Gradle
,因此找不到包
kotlinx.android.packet
。我通过直接导入库来解决这个问题:

implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
有了它,编译了
Parcelable
actual
定义

但是,我从
Foo
的定义中得到了一个错误,好像它没有正确地用
@Parcelize
注释:

Foo
不是抽象的,并且不实现抽象成员
public abstract fun writeToParcel(p0:Parcel!,p1:Int):在
android.os.Parcelable中定义的单元


这有点尴尬,但我发现问题仅仅是因为我忘了打开kotlin android extensions的实验功能,其中一个是Parcelize

因此,为了让它正常工作,我的
预期值
实际值
定义的
可打包
可打包
,编辑
lib android
build.gradle
,并添加以下行:

apply plugin: 'kotlin-android-extensions'
androidExtensions {
    experimental = true
}

不需要添加依赖项
;这是一个死胡同。

既然谷歌不推荐使用android kotlin扩展插件,你应该使用
kotlin parcelize
插件

apply plugin: 'kotlin-parcelize'

另外,我需要添加依赖项:实现“org.jetbrains.kotlin:kotlin android extensions runtime:$kotlin_version”,您的评论应该添加到这个答案@oguzhan!我也需要这种依赖!