Where can I put the `suppressKotlinVersionCompatibilityCheck` flag?

Viewed 12548

I'm trying to use the 1.4.21-2 version of kotlin which is a recent version that has a fix that allows you to use Compose + Kotlin serialization without the build hanging. This is all great, however, the Compose compiler does not know about it and gives the following (rather unhelpful) error:

e: This version (1.0.0-alpha09) of the Compose Compiler requires Kotlin version 1.4.21 but you appear to be using Kotlin version 1.4.21-2 which is not known to be compatible. Please fix your configuration (or suppressKotlinVersionCompatibilityCheck but don't say I didn't warn you!).

I would love to provide that suppression flag, however I don't know where to put it... I've spent about an hour trying to put it in random places in my gradle files, for example in composeOptions, but no luck. I also tried all the google-fu I know, but nobody seems to have actually used this and wrote anything about it.

Any ideas how to get out of that predicament?

6 Answers

I have the same problem with message:

e: This version (1.0.0-alpha11) of the Compose Compiler requires Kotlin version 1.4.21-2 but you appear to be using Kotlin version 1.4.21 which is not known to be compatible.  Please fix your configuration (or `suppressKotlinVersionCompatibilityCheck` but don't say I didn't warn you!).

Adding compiler args solved my problem:

"-P", "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"

You can add it to all KotlinCompile tasks. In app level Gradle it looks like the following:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += [
                "-Xallow-jvm-ir-dependencies",
                "-P",
                "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"
        ]
    }
}

if you are using KTS,

android {
    ...

    kotlinOptions {
        jvmTarget = "1.8"
        useIR = true

        freeCompilerArgs += listOf(
            "-P",
            "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"
        )

    ...
}

For multi-module projects add the suppression flag to project's root-level build.gradle inside allprojects {} section:

allprojects {
    repositories {
        google()
        mavenCentral()
    }

    // Suppress Compose Kotlin compiler compatibility warning
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions {
            freeCompilerArgs += [
                    "-P",
                    "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"
            ]
        }
    }
}

It is a command line argument.

See this example in a kts file here

-P plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true

You can also always simply downgrade the Kotlin Gradle Plugin to the version it states, i.e:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    val compose_version by extra("1.0.0-beta07")

    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:7.0.0-beta02")
        
        // This is the line you want to change to the needed version
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32")
    }
}

If you are using Gradle Grovy script (build.gradle),

    kotlinOptions {
        jvmTarget = "1.8"
        useIR = true

        freeCompilerArgs += [
                "-P",
                "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"
        ]
    }
Related