Já encontrou "Module was compiled with an incompatible version of Kotlin"? Você não está sozinho!
\n\nImagine: você está escrevendo código em Kotlin, tudo funciona perfeitamente, mas de repente — bum! — e o estúdio (ou console) exibe uma longa mensagem vermelha com um texto ameaçador sobre "incompatible version of Kotlin" e algumas versões 1.5.1 e 1.1.16. Cena familiar? Se você já trabalhou com Kotlin no Android Studio, IntelliJ IDEA ou apenas compilou um projeto via Gradle, esse erro certamente já fez você segurar a cabeça.
\n\nA boa notícia: ele se resolve rapidamente e sem intervenção cirúrgica. A má notícia: se você não entender, ele voltará repetidamente. Hoje vamos dissecar esse erro, entender por que ele ocorre e esquecê-lo para sempre. Vamos lá!
\n\nO que essa mensagem significa afinal?
\n\nVamos traduzir do "computadorês" para o humano. Kotlin, como qualquer linguagem moderna, está em constante evolução. Cada nova versão do compilador adiciona funcionalidades, corrige bugs e... altera o formato dos metadados internos (arquivos binários que descrevem suas classes e funções).
\n\nQuando você adiciona uma biblioteca de terceiros (ou um módulo do seu projeto), o compilador verifica: "Essa biblioteca foi compilada com qual versão do Kotlin?" E se a versão dos metadados da biblioteca (por exemplo, 1.5.1) não corresponder à versão esperada pelo seu compilador atual (por exemplo, 1.1.16), ele reclama com razão. É como tentar inserir um cartão SD de uma câmera antiga em um notebook novo — fisicamente não encaixa.
\n\nNo nosso caso, o erro diz: "A biblioteca (módulo) foi compilada com metadados da versão 1.5.1, e eu (compilador) espero a versão 1.1.16". Geralmente, isso significa que a versão do plugin Kotlin no seu projeto está desatualizada ou, ao contrário, a biblioteca é muito nova.
\n\nPor que isso acontece? 3 principais causas
\n\n1. Discrepância de versões no Gradle (mais comum)
\n\nVocê já atualizou uma dependência e esqueceu de atualizar o próprio plugin Kotlin? Ou o contrário — atualizou o plugin, mas as bibliotecas antigas permaneceram? Situação típica em projetos Android com vários módulos.
\n\n// build.gradle (Nível do Projeto)\nplugins {\n id 'org.jetbrains.kotlin.android' version '1.5.1' apply false // Plugin novo\n}\n\n// build.gradle (Nível do Módulo)\ndependencies {\n implementation 'com.some.library:old-lib:1.0.0' // Esta lib foi compilada com Kotlin 1.1.16\n}\n\nO compilador vê: plugin — 1.5.1, biblioteca — antiga. E grita: "Incompatibilidade!"
\n\n2. Conflito em projetos multimódulo
\n\nSe você tem um projeto com vários módulos (por exemplo, app, core, feature), e cada um com sua própria versão do Kotlin — espere problemas. Um módulo foi compilado com Kotlin 1.5.1, outro com 1.1.16. Ao tentar vinculá-los, surge o mesmo erro.
3. Importação "manual" de arquivos JAR/AAR
\n\nBaixou uma biblioteca da internet e colocou na pasta libs? Ótimo, mas se essa biblioteca foi compilada com uma versão diferente do Kotlin do seu projeto — olá, erro.
Como isso aparece no código? Exemplo para entender
\n\nVamos simular uma situação. Você tem um projeto em Kotlin 1.1.16 (sim, antigo, mas serve como exemplo). Você adiciona uma biblioteca que usa os recursos mais recentes do Kotlin 1.5.1.
\n\n// Seu código (Kotlin 1.1.16)\nfun main() {\n val result = SomeLibrary().doSomething() // Erro!\n println(result)\n}\n\nE dentro da biblioteca (versão 1.5.1) é usado, por exemplo, inline fun interface ou sealed interface, que simplesmente não existem na versão antiga. O compilador não entende o que é isso e gera o erro de incompatibilidade de metadados.
Solução passo a passo: do simples ao complexo
\n\nPasso 1. Verifique a versão do plugin Kotlin
\n\nAbra o build.gradle raiz (ou build.gradle.kts) do seu projeto. Encontre a linha com a versão do Kotlin:
//