110 votes

Que signifie « type de programme déjà présent » ?

Je suis en train de construire une application dans Android Studio. Après l'ajout de l'Éclipse de l'Ops de la bibliothèque en tant que gradle de dépendance(ou est-ce Maven? Je suis nouveau à l'écosystème Android), j'ai obtenu l'erreur suivante:

Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
Message{kind=ERROR, text=Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat, sources=[Unknown source file], tool name=Optional.of(D8)}

J'ai vérifié beaucoup de différents StackOverflow les questions relatives à cette erreur, mais les réponses sont toutes spécifiques à certaines bibliothèques. Je suis à la recherche non seulement d'une solution à l'erreur, mais une compréhension de ce que l'erreur de moyens. De cette façon, il sera plus facile pour les gens à comprendre les solutions à leurs cas particuliers. Jusqu'à présent, aucune réponse n'a fourni que.

D'autres StackOverflow réponses, j'ai compris qu'il a quelque chose à faire avec mon gradle fichier. Donc, voici app/build.gradle:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "---REDACTED FOR PRIVACY---"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:support-media-compat:27.1.0'
    implementation 'com.android.support:support-v13:27.1.0'
    implementation 'com.google.android.gms:play-services-maps:12.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.0.2'
}

repositories {
    maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/' }
} 

101voto

MujtabaFR Points 2209

Pour moi, le nettoyage du projet a résolu le problème

77voto

xiaomi Points 5334

Ce problème provient généralement d'un conflit de noms, dans votre cas, le soutien-v4 bibliothèque, qui est utilisé par plusieurs bibliothèques.

Pour trouver la liste des dépendances pour le module app (module par défaut du nom de l'application), nous pouvons faire un gradlew app:dependencies pour récupérer une liste de toutes les bibliothèques.

Nous avons constaté que support-v4 utilisé par:

//short version of the dependencies list highlighting support-v4
+--- com.android.support:support-v13:27.1.0
|    \--- com.android.support:support-v4:27.1.0

+--- com.google.android.gms:play-services-maps:12.0.1
|    +--- com.google.android.gms:play-services-base:12.0.1
|    |    +--- com.google.android.gms:play-services-basement:12.0.1
|    |    |    +--- com.android.support:support-v4:26.1.0 -> 27.1.0 (*)

+--- org.eclipse.paho:org.eclipse.paho.android.service:1.0.2
|    +--- com.google.android:support-v4:r7  // <- problem here

Nous voyons que le soutien-v4 sur les Cartes d'utiliser la version fournie de soutien-v13.

Nous voyons aussi que l'éclipse de la bibliothèque est en utilisant une autre version (r7 ??).

Pour résoudre votre problème, vous pouvez essayer d'exclure le module support-v4 de cette éclipse de la bibliothèque comme ceci:

implementation ('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
    exclude module: 'support-v4'
}

Ensuite, vous devriez être en mesure de compiler votre application.

Btw, vous devez prendre soin que l'éclipse module ne se cassent pas par le test de votre code.

15voto

Redman Points 4834

De officiel Doc

Si une classe apparaît plus d'une fois sur l'exécution du classpath, vous obtenez un message d'erreur semblable au suivant:

Program type already present com.example.MyClass

Cette erreur se produit généralement en raison de l'une des circonstances suivantes:

  • Un binaire dépendance comprend une bibliothèque de votre application comprend aussi comme une dépendance directe.

    Par exemple, votre application déclare une dépendance directe de la Bibliothèque Une Bibliothèque et B, mais à la Bibliothèque comprend déjà Bibliothèque B dans ses binaire. Pour résoudre ce problème, supprimez la Bibliothèque de B comme une dépendance directe.

  • Votre application dispose d'un local binaires dépendance et à distance binaires dépendance sur la même bibliothèque.

    Pour résoudre ce problème, supprimez l'une des dépendances binaires. ( Voir même si la bibliothèque est ajouté que le pot et gradle de la dépendance)

4voto

mexan juadha Points 51

Il m'est arrivé aussi, mais dans mon cas, j'essaie d'inclure différentes dépendances qui ont la même classe en utilisant et donc Android Studio marqué comme classe en double, alors j'ai résolu le problème en utilisant et d'inclure différentes dépendances basées sur la variante de construction.

2voto

Phani varma Points 6

Ajouter la bibliothèque de support au fichier Gradle de niveau app

implémentation 'com.android.support:design:27.1.0'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X