Introdução: O "sósia" no seu projeto
\n\nImagine a situação: você está escrevendo código em Kotlin para Android, tudo funciona perfeitamente. Você adiciona uma nova biblioteca, inicia a compilação — e o Gradle exibe um erro vermelho: "Duplicate class". Familiar? Se você já trabalhou com desenvolvimento Android, certamente já viu esta mensagem. No Stack Overflow, esta pergunta acumulou milhares de visualizações, e não é à toa — o erro pode irritar até mesmo um desenvolvedor experiente.
\n\nNeste artigo, vamos analisar o que é classe duplicada em Kotlin Android, por que ela ocorre e, principalmente, como corrigi-la de uma vez por todas. Você conhecerá as 5 causas mais comuns, obterá soluções prontas e aprenderá a prevenir conflitos de dependências. Vamos lá!
\n\nO que é Duplicate class e por que isso acontece?
\n\nO erro Duplicate class ocorre quando o sistema de compilação (Gradle) encontra duas ou mais classes idênticas com o mesmo nome completo (FQN — Fully Qualified Name). No mundo Android, isso geralmente significa que a mesma classe está presente em diferentes bibliotecas ou módulos do seu projeto.
Imagine que você encomendou dois livros idênticos, mas de editoras diferentes. Eles estão na mesma estante — e o bibliotecário não sabe qual pegar. Assim é o Gradle: ele não consegue decidir qual das classes duplicadas usar.
\n\nPor que isso é especialmente relevante para Kotlin? Kotlin usa ativamente a biblioteca padrão Kotlin (kotlin-stdlib), que pode entrar em conflito com suas próprias versões de outras fontes. Adicione AndroidX, bibliotecas Google, Firebase — e você terá uma mistura explosiva.
Top 5 causas do erro Duplicate class em Kotlin Android
\n\nReunimos os cenários mais comuns que você encontrará no desenvolvimento real. Cada item é acompanhado por um exemplo de código e solução.
\n\n1. Conflito de versões do Kotlin stdlib
\n\nEste é o rei de todos os duplicados. Quando você adiciona uma biblioteca que traz sua própria versão do kotlin-stdlib, e você já tem outra no projeto — ocorre um conflito.
Exemplo:
\n// build.gradle.kts (módulo app)\ndependencies {\n implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")\n implementation("com.some.library:example:2.0.0") // esta biblioteca traz kotlin-stdlib:1.8.0\n}\n\n\nO Gradle exibirá algo como:
\nDuplicate class kotlin.collections.ArraysKt found in modules kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0) and kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0)\n\n\nSolução: Use uma versão única do Kotlin para todo o projeto. A melhor maneira é defini-la no build.gradle.kts raiz:
// build.gradle.kts (raiz)\nplugins {\n kotlin("android") version "1.9.0" apply false\n}\n\n// build.gradle.kts (módulo app)\nplugins {\n kotlin("android")\n}\n\n\nVocê também pode excluir explicitamente a dependência:
\nimplementation("com.some.library:example:2.0.0") {\n exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")\n}\n\n\n2. Duplicação de AndroidX e Support Library
\n\nUm clássico. Se você usa bibliotecas antigas Support Library junto com AndroidX, elas contêm classes idênticas (por exemplo, android.support.v4.app.Fragment e androidx.fragment.app.Fragment).
Exemplo de erro:
\nDuplicate class android.support.v4.app.Fragment found in modules support-compat-28.0.0 and fragment-1.6.0\n\n\nSolução:
\n- \n
- Ative a flag
android.useAndroidX=truenogradle.properties. \n - Certifique-se de que todas as bibliotecas foram migradas para AndroidX. Use a ferramenta de migração no Android Studio (Refactor > Migrate to AndroidX). \n
- Se a biblioteca não suportar AndroidX, use