Vous avez rencontré "Module was compiled with an incompatible version of Kotlin" ? Vous n'êtes pas seul !
\n\nImaginez : vous écrivez du code en Kotlin, tout fonctionne comme sur des roulettes, mais soudain — bam ! — le studio (ou la console) affiche un long message rouge menaçant avec "incompatible version of Kotlin" et des versions 1.5.1 et 1.1.16. Un scénario familier ? Si vous avez déjà travaillé avec Kotlin dans Android Studio, IntelliJ IDEA ou simplement compilé un projet via Gradle, cette erreur vous a sûrement fait vous prendre la tête.
\n\nBonne nouvelle : elle se résout rapidement et sans intervention chirurgicale. Mauvaise nouvelle : si vous ne comprenez pas le problème, elle reviendra encore et encore. Aujourd'hui, nous allons décortiquer cette erreur, comprendre pourquoi elle se produit, et l'oublier à jamais. C'est parti !
\n\nQue signifie réellement ce message ?
\n\nTraduisons du "langage informatique" en langage humain. Kotlin, comme tout langage moderne, évolue constamment. Chaque nouvelle version du compilateur ajoute des fonctionnalités, corrige des bugs et... modifie le format des métadonnées internes (les fichiers binaires qui décrivent vos classes et fonctions).
\n\nLorsque vous importez une bibliothèque tierce (ou un module de votre projet), le compilateur vérifie : "Cette bibliothèque a-t-elle été compilée avec la même version de Kotlin ?" Et si la version des métadonnées de la bibliothèque (par exemple, 1.5.1) ne correspond pas à la version attendue par votre compilateur actuel (par exemple, 1.1.16), il s'indigne à juste titre. C'est comme essayer d'insérer une carte SD d'un vieil appareil photo dans un nouvel ordinateur portable — physiquement incompatible.
\n\nDans notre cas, l'erreur indique : "La bibliothèque (module) a été compilée avec des métadonnées de version 1.5.1, mais moi (le compilateur) j'attends la version 1.1.16". Cela signifie généralement que la version du plugin Kotlin dans votre projet est obsolète ou, au contraire, que la bibliothèque est trop récente.
\n\nPourquoi cela se produit-il ? 3 causes principales
\n\n1. Incohérence des versions dans Gradle (le plus fréquent)
\n\nAvez-vous déjà mis à jour une dépendance en oubliant de mettre à jour le plugin Kotlin lui-même ? Ou l'inverse — mis à jour le plugin tout en conservant les anciennes bibliothèques ? Une situation typique pour les projets Android avec de nombreux modules.
\n\n// build.gradle (niveau Projet)\nplugins {\n id 'org.jetbrains.kotlin.android' version '1.5.1' apply false // Plugin récent\n}\n\n// build.gradle (niveau Module)\ndependencies {\n implementation 'com.some.library:old-lib:1.0.0' // Cette bibliothèque a été compilée avec Kotlin 1.1.16\n}\n\nLe compilateur voit : plugin — 1.5.1, bibliothèque — ancienne. Et il crie : "Incompatibilité !"
\n\n2. Conflit dans les projets multi-modules
\n\nSi votre projet comporte plusieurs modules (par exemple, app, core, feature), et que chacun a sa propre version de Kotlin — attendez-vous à des problèmes. Un module compilé avec Kotlin 1.5.1, un autre avec 1.1.16. En essayant de les lier, l'erreur fatidique apparaît.
3. Import "manuel" de fichiers JAR/AAR
\n\nVous avez téléchargé une bibliothèque sur Internet et l'avez placée dans le dossier libs ? Parfait, mais si cette bibliothèque a été compilée avec une version de Kotlin différente de celle de votre projet — bonjour l'erreur.
À quoi cela ressemble-t-il dans le code ? Exemple pour comprendre
\n\nSimulons une situation. Vous avez un projet en Kotlin 1.1.16 (oui, c'est vieux, mais pour l'exemple ça convient). Vous importez une bibliothèque qui utilise les toutes dernières fonctionnalités de Kotlin 1.5.1.
\n\n// Votre code (Kotlin 1.1.16)\nfun main() {\n val result = SomeLibrary().doSomething() // Erreur !\n println(result)\n}\n\nÀ l'intérieur de la bibliothèque (version 1.5.1), on utilise, par exemple, inline fun interface ou sealed interface, qui n'existent tout simplement pas dans l'ancienne version. Le compilateur ne comprend pas ce que c'est et génère une erreur d'incompatibilité des métadonnées.
Solution étape par étape : du simple au complexe
\n\nÉtape 1. Vérifiez la version du plugin Kotlin
\n\nOuvrez le build.gradle racine (ou build.gradle.kts) de votre projet. Trouvez la ligne avec la version de Kotlin :
//