Duplicate class in Kotlin Android: Die Top-5 Fehler und Lösungen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Der "Doppelgänger" in Ihrem Projekt

\n\n

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

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

Was ist Duplicate class und warum passiert das?

\n\n

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

\n\n

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

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

\n\n

Die Top-5 Ursachen für den Fehler Duplicate class in Kotlin Android

\n\n

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

1. Versionskonflikt von Kotlin stdlib

\n\n

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

\n\n

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

Gradle wird etwa Folgendes ausgeben:

\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

Lösung: Verwenden Sie eine einheitliche Kotlin-Version für das gesamte Projekt. Der beste Weg ist, sie im root build.gradle.kts festzulegen:

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

Sie können die Abhängigkeit auch explizit ausschließen:

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

2. Duplizierung von AndroidX und Support Library

\n\n

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

\n\n

Beispiel Fehler:

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

Lösung:

\n
    \n
  • Aktivieren Sie das Flag android.useAndroidX=true in der gradle.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

Blogs

Buchempfehlungen