我想在一个多平台项目中创建一个类,并使用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的build.gradle,所以没有找到kotlinx.android.parcel包。我只是通过直接导入库来解决这个问题:
implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"这样,actual定义的Parcelable就会编译。
但是,我从Foo的定义中得到了一个错误,好像它没有正确地使用@Parcelize进行注释一样。
类
Foo不是抽象的,也没有实现在android.os.Parcelable中定义的抽象成员public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit。
发布于 2018-07-14 08:48:44
这有点尴尬,但我发现问题的原因很简单,因为我忘了打开kotlin-android-extensions的实验特性,其中一个是@Parcelize.
因此,要使其正常工作,只需保留问题中expected和actual对Parcelable和Parcelize的定义,并编辑lib-android的build.gradle并添加以下行:
apply plugin: 'kotlin-android-extensions'
androidExtensions {
experimental = true
}不需要添加dependencies;这是一个死胡同。
发布于 2021-01-05 08:55:45
https://stackoverflow.com/questions/51335555
复制相似问题