Classe dupliquée dans Kotlin Android : Top 5 des erreurs et solutions

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Le « double » dans votre projet

\n\n

Imaginez la situation : vous écrivez du code en Kotlin pour Android, tout fonctionne parfaitement. Vous ajoutez une nouvelle bibliothèque, vous lancez la compilation — et Gradle affiche une erreur rouge : « Duplicate class ». Familier ? Si vous avez déjà touché au développement Android, vous avez sûrement vu ce message. Sur Stack Overflow, cette question a recueilli des milliers de vues, et ce n'est pas pour rien — l'erreur peut déstabiliser même un développeur expérimenté.

\n\n

Dans cet article, nous allons voir ce qu'est une classe dupliquée dans Kotlin Android, pourquoi elle apparaît, et surtout — comment la corriger une fois pour toutes. Vous découvrirez les 5 causes les plus fréquentes, obtiendrez des solutions prêtes à l'emploi et apprendrez à prévenir les conflits de dépendances. C'est parti !

\n\n

Qu'est-ce qu'une classe dupliquée et pourquoi cela se produit-il ?

\n\n

L'erreur Duplicate class se produit lorsque le système de compilation (Gradle) trouve deux classes ou plus identiques avec le même nom complet (FQN — Fully Qualified Name). Dans le monde Android, cela signifie généralement qu'une même classe est présente dans différentes bibliothèques ou modules de votre projet.

\n\n

Imaginez que vous ayez commandé deux livres identiques, mais de différents éditeurs. Ils sont sur la même étagère — et le bibliothécaire ne sait pas lequel prendre. C'est pareil pour Gradle : il ne peut pas décider laquelle des classes dupliquées utiliser.

\n\n

Pourquoi est-ce particulièrement pertinent pour Kotlin ? Kotlin utilise activement sa bibliothèque standard (kotlin-stdlib), qui peut entrer en conflit avec ses propres versions provenant d'autres sources. Ajoutez à cela AndroidX, les bibliothèques Google, Firebase — et vous obtenez un mélange explosif.

\n\n

Top 5 des causes de l'erreur de classe dupliquée dans Kotlin Android

\n\n

Nous avons rassemblé les scénarios les plus courants que vous rencontrerez en développement réel. Chaque point est accompagné d'un exemple de code et d'une solution.

\n\n

1. Conflit de versions de Kotlin stdlib

\n\n

C'est le roi de tous les doublons. Lorsque vous ajoutez une bibliothèque qui entraîne sa propre version de kotlin-stdlib, alors que vous en avez déjà une autre dans votre projet — un conflit apparaît.

\n\n

Exemple :

\n
// build.gradle.kts (module app)\ndependencies {\n    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")\n    implementation("com.some.library:example:2.0.0") // cette bibliothèque entraîne kotlin-stdlib:1.8.0\n}\n
\n\n

Gradle affichera quelque chose comme :

\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

Solution : Utilisez une version unique de Kotlin pour tout le projet. La meilleure façon est de la définir dans le build.gradle.kts racine :

\n
// build.gradle.kts (racine)\nplugins {\n    kotlin("android") version "1.9.0" apply false\n}\n\n// build.gradle.kts (module app)\nplugins {\n    kotlin("android")\n}\n
\n\n

Vous pouvez aussi exclure explicitement la dépendance :

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

2. Duplication d'AndroidX et de la Support Library

\n\n

Un grand classique. Si vous utilisez d'anciennes bibliothèques Support Library avec AndroidX, elles contiennent des classes identiques (par exemple, android.support.v4.app.Fragment et androidx.fragment.app.Fragment).

\n\n

Exemple d'erreur :

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

Solution :

\n
    \n
  • Activez le flag android.useAndroidX=true dans gradle.properties.
  • \n
  • Assurez-vous que toutes les bibliothèques sont migrées vers AndroidX. Utilisez l'outil de migration dans Android Studio (Refactor > Migrate to AndroidX).
  • \n
  • Si une bibliothèque ne supporte pas AndroidX, utili

Blogs

Book Recommendations