@Parcelize 在多平台项目中
@Parcelize in multi-platform project
我想在多平台项目中创建一个class,并在Android版本中使用Parcelize
使其成为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
的 build.gradle
,所以包 kotlinx.android.parcel
没有找到。我设法通过直接导入库来解决这个问题:
implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
有了这个,Parcelable
的 actual
定义编译。
但是,我从 Foo
的定义中得到一个错误,就好像它没有用 @Parcelize
:
正确注释一样
Class Foo
is not abstract and does not implement abstract member public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit
defined in android.os.Parcelable
嗯,这有点尴尬,但我发现问题仅仅是因为我忘记打开 kotlin-android-extensions
的实验性功能,其中之一是 @Parcelize
...
因此,为了使其正常工作,保留问题中我对 Parcelable
和 Parcelize
的 expected
和 actual
定义就足够了,并编辑 lib-android
的 build.gradle
并添加以下行:
apply plugin: 'kotlin-android-extensions'
androidExtensions {
experimental = true
}
不需要 dependencies
添加;那是一个死胡同的方向。
由于 Google 弃用了 android-kotlin-extensions
插件,您应该使用 kotlin-parcelize
插件
apply plugin: 'kotlin-parcelize'
我想在多平台项目中创建一个class,并在Android版本中使用Parcelize
使其成为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
的 build.gradle
,所以包 kotlinx.android.parcel
没有找到。我设法通过直接导入库来解决这个问题:
implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
有了这个,Parcelable
的 actual
定义编译。
但是,我从 Foo
的定义中得到一个错误,就好像它没有用 @Parcelize
:
Class
Foo
is not abstract and does not implement abstract memberpublic abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit
defined inandroid.os.Parcelable
嗯,这有点尴尬,但我发现问题仅仅是因为我忘记打开 kotlin-android-extensions
的实验性功能,其中之一是 @Parcelize
...
因此,为了使其正常工作,保留问题中我对 Parcelable
和 Parcelize
的 expected
和 actual
定义就足够了,并编辑 lib-android
的 build.gradle
并添加以下行:
apply plugin: 'kotlin-android-extensions'
androidExtensions {
experimental = true
}
不需要 dependencies
添加;那是一个死胡同的方向。
由于 Google 弃用了 android-kotlin-extensions
插件,您应该使用 kotlin-parcelize
插件
apply plugin: 'kotlin-parcelize'