首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Parcelize in多平台项目

@Parcelize in多平台项目
EN

Stack Overflow用户
提问于 2018-07-14 05:27:12
回答 2查看 4.3K关注 0票数 22

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

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

代码语言:javascript
复制
expect annotation class Parcelize()
expect interface Parcelable

@Parcelize
data class Foo(x: Int): Parcelable

在我的lib-android项目中:

代码语言:javascript
复制
actual typealias Parcelize = kotlinx.android.parcel.Parcelize
actual typealias Parcelable = android.os.Parcelable

第一个问题是,Gradle插件kotlin-android-extensions似乎没有接受lib-androidbuild.gradle,所以没有找到kotlinx.android.parcel包。我只是通过直接导入库来解决这个问题:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-14 08:48:44

这有点尴尬,但我发现问题的原因很简单,因为我忘了打开kotlin-android-extensions的实验特性,其中一个是@Parcelize.

因此,要使其正常工作,只需保留问题中expectedactualParcelableParcelize的定义,并编辑lib-androidbuild.gradle并添加以下行:

代码语言:javascript
复制
apply plugin: 'kotlin-android-extensions'
androidExtensions {
    experimental = true
}

不需要添加dependencies;这是一个死胡同。

票数 21
EN

Stack Overflow用户

发布于 2021-01-05 08:55:45

由于Google不推荐android-kotlin-extensions插件,所以您应该使用kotlin-parcelize插件。

代码语言:javascript
复制
apply plugin: 'kotlin-parcelize'

来源

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51335555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档