Classe duplicada em Kotlin Android: Top 5 erros e soluções

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: O "sósia" no seu projeto

\n\n

Imagine 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\n

Neste 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\n

O que é Duplicate class e por que isso acontece?

\n\n

O 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.

\n\n

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\n

Por 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.

\n\n

Top 5 causas do erro Duplicate class em Kotlin Android

\n\n

Reunimos os cenários mais comuns que você encontrará no desenvolvimento real. Cada item é acompanhado por um exemplo de código e solução.

\n\n

1. Conflito de versões do Kotlin stdlib

\n\n

Este é 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.

\n\n

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\n

O Gradle exibirá algo como:

\n
Duplicate 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\n

Solução: Use uma versão única do Kotlin para todo o projeto. A melhor maneira é defini-la no build.gradle.kts raiz:

\n
// 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\n

Você também pode excluir explicitamente a dependência:

\n
implementation("com.some.library:example:2.0.0") {\n    exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")\n}\n
\n\n

2. Duplicação de AndroidX e Support Library

\n\n

Um 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).

\n\n

Exemplo de erro:

\n
Duplicate class android.support.v4.app.Fragment found in modules support-compat-28.0.0 and fragment-1.6.0\n
\n\n

Solução:

\n
    \n
  • Ative a flag android.useAndroidX=true no gradle.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

Blogs

Book Recommendations