Einleitung: Der "Doppelgänger" in Ihrem Projekt
\n\nStellen Sie sich vor: Sie schreiben Kotlin-Code für Android, alles funktioniert einwandfrei. Sie fügen eine neue Bibliothek hinzu, starten den Build – und Gradle gibt einen roten Fehler aus: «Duplicate class». Kommt Ihnen das bekannt vor? Wenn Sie schon einmal mit Android-Entwicklung zu tun hatten, haben Sie diese Meldung mit Sicherheit gesehen. Auf Stack Overflow hat diese Frage tausende Aufrufe, und das zu Recht – der Fehler kann selbst erfahrene Entwickler aus der Fassung bringen.
\n\nIn diesem Artikel werden wir analysieren, was Duplicate class in Kotlin Android ist, warum es auftritt und vor allem – wie man es ein für alle Mal behebt. Sie erfahren die 5 häufigsten Ursachen, erhalten fertige Lösungen und lernen, Abhängigkeitskonflikte zu vermeiden. Los geht's!
\n\nWas ist Duplicate class und warum passiert das?
\n\nDer Fehler Duplicate class tritt auf, wenn das Build-System (Gradle) zwei oder mehr identische Klassen mit demselben vollständigen Namen (FQN – Fully Qualified Name) findet. In der Android-Welt bedeutet dies in der Regel, dass dieselbe Klasse in verschiedenen Bibliotheken oder Modulen Ihres Projekts vorhanden ist.
Stellen Sie sich vor, Sie bestellen zwei identische Bücher, aber von verschiedenen Verlagen. Sie liegen im selben Regal – und der Bibliothekar weiß nicht, welches er nehmen soll. So ähnlich ist es bei Gradle: Es kann nicht entscheiden, welche der doppelten Klassen verwendet werden soll.
\n\nWarum ist das besonders für Kotlin relevant? Kotlin verwendet intensiv die Kotlin-Standardbibliothek (kotlin-stdlib), die mit ihren eigenen Versionen aus anderen Quellen in Konflikt geraten kann. Fügen Sie AndroidX, Google-Bibliotheken, Firebase hinzu – und Sie erhalten eine explosive Mischung.
Die Top-5 Ursachen für den Fehler Duplicate class in Kotlin Android
\n\nWir haben die häufigsten Szenarien zusammengestellt, denen Sie in der realen Entwicklung begegnen werden. Jeder Punkt wird von einem Codebeispiel und einer Lösung begleitet.
\n\n1. Versionskonflikt von Kotlin stdlib
\n\nDies ist der König aller Duplikate. Wenn Sie eine Bibliothek einbinden, die ihre eigene Version von kotlin-stdlib mitbringt, und Sie haben bereits eine andere in Ihrem Projekt – entsteht ein Konflikt.
Beispiel:
\n// build.gradle.kts (Modul app)\ndependencies {\n implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")\n implementation("com.some.library:example:2.0.0") // Diese Bibliothek bringt kotlin-stdlib:1.8.0 mit\n}\n\n\nGradle wird etwa Folgendes ausgeben:
\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\nLösung: Verwenden Sie eine einheitliche Kotlin-Version für das gesamte Projekt. Der beste Weg ist, sie im root build.gradle.kts festzulegen:
// build.gradle.kts (root)\nplugins {\n kotlin("android") version "1.9.0" apply false\n}\n\n// build.gradle.kts (Modul app)\nplugins {\n kotlin("android")\n}\n\n\nSie können die Abhängigkeit auch explizit ausschließen:
\nimplementation("com.some.library:example:2.0.0") {\n exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")\n}\n\n\n2. Duplizierung von AndroidX und Support Library
\n\nEin Klassiker. Wenn Sie alte Support Library-Bibliotheken zusammen mit AndroidX verwenden, enthalten diese identische Klassen (z. B. android.support.v4.app.Fragment und androidx.fragment.app.Fragment).
Beispiel Fehler:
\nDuplicate class android.support.v4.app.Fragment found in modules support-compat-28.0.0 and fragment-1.6.0\n\n\nLösung:
\n- \n
- Aktivieren Sie das Flag
android.useAndroidX=truein dergradle.properties. \n - Stellen Sie sicher, dass alle Bibliotheken auf AndroidX migriert sind. Verwenden Sie das Migrationstool in Android Studio (Refactor > Migrate to AndroidX). \n
- Wenn eine Bibliothek AndroidX nicht unterstützt, verwenden Sie