kotlingradleserializationretrofit

Kotlinx serialization error in the implementation


Good morning, I'm new to app development, and I'm trying to add kotlinx.serialization to my project. However, I'm encountering difficulties implementing it, as my project crashes upon building. Despite my efforts, I haven't been able to resolve the issue.

To provide context, my app utilizes Retrofit. When users search for a letter or name in the search bar, it should return a list of superheroes.

Here's what I currently have:

build.gradle.kts(:app):

plugins {
    alias(libs.plugins.androidApplication)
    alias(libs.plugins.jetbrainsKotlinAndroid)
    alias(libs.plugins.hilt)
    alias(libs.plugins.kapt)
    alias(libs.plugins.serialization)
}

dependencies {
   // Serialization
    implementation(libs.kotlinx.serialization.json)
    implementation(libs.retrofit2.kotlinx.serialization.converter)
}
libs.versions.toml:

[versions]
kotlin = "1.9.23"

[libraries]
kotlinxSerializationJson = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
retrofit2KotlinxSerializationConverter = { module = "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", version.ref = "retrofit2KotlinxSerializationConverter" }

[plugins]
serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version = "kotlin" }
build.gradle.kts(App):

plugins {
    alias(libs.plugins.hilt) apply false
    alias(libs.plugins.kapt) apply false
    alias(libs.plugins.androidApplication) apply false
    alias(libs.plugins.jetbrainsKotlinAndroid) apply false
    alias(libs.plugins.serialization) apply false
}

If I only leave the following dependencies:

dependencies {
   // Serialization
    implementation(libs.kotlinx.serialization.json)
    implementation(libs.retrofit2.kotlinx.serialization.converter)
}

It compiles, but then I encounter this error when I search something in my search bar: "kotlinx.serialization is unable to find a serializer for a certain type." However, I do have a @Serializable annotation in my data class. When I hover over @Serializable, I see the message: "kotlinx.serialization compiler plugin is not applied to the module, so this annotation would not be processed. Make sure that you've set up your build script correctly and re-import the project."

Thank you for your help.


Solution

  • You have this line in your version catalog file:

    serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version = "kotlin" }
    

    However to refer to the common Kotlin version it should be:

    serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
    

    Also, I'd expect to see a plugin defined in that way to be added to the build like this, using alias not id (see docs):

    plugins {
        alias(libs.plugins.serialization) // apply false as applicable
    }
    

    I'm surprised you're not getting an error earlier in the build, actually.