代码之家  ›  专栏  ›  技术社区  ›  Cactus

@多平台项目中的地块化

  •  11
  • Cactus  · 技术社区  · 6 年前

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

    所以在我的 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安卓 build.gradle ,所以包裹 kotlinx.android.parcel 找不到。我通过直接导入库来解决这个问题:

    implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
    

    有了这个, actual 定义 包裹的 编译。

    但是,我从定义 Foo ,好像没有正确地用 @Parcelize 以下内容:

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

    1 回复  |  直到 6 年前
        1
  •  16
  •   Cactus    6 年前

    好吧,这有点尴尬,但我发现问题很简单,因为我忘了打开 kotlin-android-extensions ,其中之一是 @Parcelize

    所以为了让它工作,它足够让我 expected actual 定义 Parcelable Parcelize 如问题所述,并编辑 lib-android build.gradle 并添加以下行:

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

    dependencies 需要补充;这是一个死胡同。

    推荐文章