Haben Sie "Module was compiled with an incompatible version of Kotlin" gesehen? Sie sind nicht allein!
\n\nStellen Sie sich vor: Sie schreiben Code in Kotlin, alles läuft wie geschmiert, aber plötzlich – peng! – gibt die IDE (oder Konsole) eine lange rote Meldung mit dem bedrohlichen Text über "incompatible version of Kotlin" und irgendwelchen Versionen 1.5.1 und 1.1.16 aus. Kommt Ihnen das bekannt vor? Wenn Sie jemals mit Kotlin in Android Studio, IntelliJ IDEA gearbeitet oder einfach ein Projekt über Gradle gebaut haben, dann hat Sie dieser Fehler mit Sicherheit schon einmal zur Verzweiflung gebracht.
\n\nDie gute Nachricht: Er lässt sich schnell und ohne chirurgischen Eingriff beheben. Die schlechte Nachricht: Wenn Sie ihn nicht verstehen, wird er immer wieder auftauchen. Heute zerlegen wir diesen Fehler in seine Einzelteile, verstehen, warum er auftritt, und vergessen ihn für immer. Los geht's!
\n\nWas bedeutet diese Meldung überhaupt?
\n\nÜbersetzen wir von "Computersprache" ins Menschliche. Kotlin entwickelt sich, wie jede moderne Sprache, ständig weiter. Jede neue Compiler-Version fügt Funktionen hinzu, behebt Fehler und... ändert das Format der internen Metadaten (der Binärdateien, die Ihre Klassen und Funktionen beschreiben).
\n\nWenn Sie eine externe Bibliothek (oder ein Modul Ihres Projekts) einbinden, prüft der Compiler: "Wurde diese Bibliothek mit derselben Kotlin-Version kompiliert?" Und wenn die Version der Metadaten der Bibliothek (z. B. 1.5.1) nicht mit der Version übereinstimmt, die Ihr aktueller Compiler erwartet (z. B. 1.1.16), beschwert er sich zu Recht. Das ist, als würde man versuchen, eine SD-Karte von einer alten Kamera in einen neuen Laptop zu stecken – es passt physisch nicht.
\n\nIn unserem Fall sagt der Fehler: "Die Bibliothek (das Modul) wurde mit Metadaten der Version 1.5.1 erstellt, aber ich (der Compiler) erwarte Version 1.1.16". Normalerweise bedeutet das, dass die Version des Kotlin-Plugins in Ihrem Projekt veraltet ist oder umgekehrt, die Bibliothek zu neu ist.
\n\nWarum passiert das? Die 3 Hauptursachen
\n\n1. Versionskonflikte in Gradle (am häufigsten)
\n\nHaben Sie schon einmal eine Abhängigkeit aktualisiert, aber vergessen, das Kotlin-Plugin selbst zu aktualisieren? Oder umgekehrt – das Plugin aktualisiert, aber die alten Bibliotheken belassen? Eine typische Situation für Android-Projekte mit vielen Modulen.
\n\n// build.gradle (Projekt-Ebene)\nplugins {\n id 'org.jetbrains.kotlin.android' version '1.5.1' apply false // Plugin ist neu\n}\n\n// build.gradle (Modul-Ebene)\ndependencies {\n implementation 'com.some.library:old-lib:1.0.0' // Diese Lib wurde mit Kotlin 1.1.16 erstellt\n}\n\nDer Compiler sieht: Plugin – 1.5.1, Bibliothek – alt. Und schreit: "Inkompatibilität!"
\n\n2. Konflikte in Multi-Modul-Projekten
\n\nWenn Ihr Projekt mehrere Module hat (z. B. app, core, feature) und jedes seine eigene Kotlin-Version hat, dann ist Ärger vorprogrammiert. Ein Modul wurde mit Kotlin 1.5.1 erstellt, ein anderes mit 1.1.16. Beim Versuch, sie zu verbinden, tritt genau dieser Fehler auf.
3. Manueller Import von JAR/AAR-Dateien
\n\nHaben Sie eine Bibliothek aus dem Internet heruntergeladen und in den Ordner libs gelegt? Super, aber wenn diese Bibliothek mit einer anderen Kotlin-Version als Ihr Projekt erstellt wurde – hallo, Fehler.
Wie sieht das im Code aus? Ein Beispiel zum Verständnis
\n\nLassen Sie uns eine Situation simulieren. Sie haben ein Projekt mit Kotlin 1.1.16 (ja, alt, aber für das Beispiel reicht es). Sie binden eine Bibliothek ein, die die neuesten Funktionen von Kotlin 1.5.1 verwendet.
\n\n// Ihr Code (Kotlin 1.1.16)\nfun main() {\n val result = SomeLibrary().doSomething() // Fehler!\n println(result)\n}\n\nIm Inneren der Bibliothek (Version 1.5.1) wird z. B. inline fun interface oder sealed interface verwendet, die es in der alten Version einfach nicht gibt. Der Compiler versteht nicht, was das ist, und gibt einen Metadaten-Inkompatibilitätsfehler aus.
Schritt-für-Schritt-Lösung: Vom Einfachen zum Komplexen
\n\nSchritt 1. Überprüfen Sie die Version des Kotlin-Plugins
\n\nÖffnen Sie die build.gradle-Datei (oder build.gradle.kts) auf der Stammebene Ihres Projekts. Suchen Sie die Zeile mit der Kotlin-Version:
//