2

I am trying to use kotlin android extensions plugin Parcelize on Android platform.

I am on Kotlin 1.3.72.

I generated successfully a unitary dumb Rect.java without the plugin (by implementing parcelable methods manually) BUT this is kind of annoying to do it for lots of aidl objects especially since Kotlin has a code gen plugin to do it automatically for you.

I got the following error when using @Parcelize annotation:

error: class 'Rect' is not abstract and does not implement abstract member public abstract fun writeToParcel(dest: Parcel!, flags: Int): Unit defined in android.os.Parcelable

Can you told me where I am wrong?

Following class Rect with (working) and without (not working) annotation, and the Android.bp file:

import android.os.Parcel
import android.os.Parcelable

class Rect() : Parcelable {
    var left: Int = 0
    var top: Int = 0
    var right: Int = 0
    var bottom: Int = 0

    companion object CREATOR : Parcelable.Creator<Rect> {
        override fun createFromParcel(parcel: Parcel): Rect {
            return Rect(parcel)
        }

        override fun newArray(size: Int): Array<Rect> {
            return Array(size) { Rect() }
        }
    }

    private constructor(inParcel: Parcel) : this() {
        readFromParcel(inParcel)
    }

    override fun writeToParcel(outParcel: Parcel, flags: Int) {
        outParcel.writeInt(left)
        outParcel.writeInt(top)
        outParcel.writeInt(right)
        outParcel.writeInt(bottom)
    }

    private fun readFromParcel(inParcel: Parcel) {
        left = inParcel.readInt()
        top = inParcel.readInt()
        right = inParcel.readInt()
        bottom = inParcel.readInt()
    }

    override fun describeContents(): Int {
        return 0
    }
}

import kotlinx.android.parcel.Parcelize
import android.os.Parcelable

@Parcelize
class Rect() : Parcelable {
    var left: Int = 0
    var top: Int = 0
    var right: Int = 0
    var bottom: Int = 0
}

java_library {
    name: "my_module",
    srcs: ["src/main/java/**/*.java", "src/main/java/**/*.kt", "src/main/aidl/**/I*.aidl"],
    java_version: "1.8",
    aidl: {
        local_include_dirs: ["src/main/aidl"],
    },
    static_libs: [
        "kotlin-android-extensions"
    ],
}


java_import {
    name: "trove4j",
    jars: ["trove4j-1.0.20200330.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_import {
    name: "kotlin-daemon-embeddable",
    jars: ["kotlin-daemon-embeddable-1.3.72.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_import {
    name: "kotlin-script-runtime",
    jars: ["kotlin-script-runtime-1.3.72.jar"],
    host_supported: true,
    sdk_version: "current",
}

java_import {
    name: "kotlin-compiler-embeddable",
    jars: ["kotlin-compiler-embeddable-1.3.72.jar"],
    libs: ["kotlin-stdlib", "kotlin-reflect", "kotlin-script-runtime", "kotlin-daemon-embeddable", "trove4j"],
    host_supported: true,
    sdk_version: "current",
}

java_import {
    name: "kotlin-android-extensions",
    jars: ["kotlin-android-extensions-1.3.72.jar"],
    libs: ["kotlin-compiler-embeddable"],
    host_supported: true,
    sdk_version: "current",
}

0 Answers0