web-dev-qa-db-fra.com

Que signifie "Type de programme déjà présent"?

J'essaie de créer une application dans Android Studio. Après avoir ajouté la bibliothèque Eclipse Paho en tant que dépendance de niveaux (ou s'agit-il de Maven? Je suis nouveau dans l'écosystème Android, _), j'ai 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é de nombreuses questions StackOverflow relatives à cette erreur, mais les réponses sont toutes spécifiques à certaines bibliothèques. Je ne cherche pas seulement une solution à l'erreur, mais une compréhension de ce que l'erreur signifie . Ainsi Il sera plus facile pour les gens de trouver des solutions à leurs cas particuliers. Jusqu'à présent, aucune réponse n'a fourni cela.

D'après d'autres réponses StackOverflow, j'ai compris que cela avait quelque chose à voir avec mon fichier de classement. Alors, 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/' }
} 
55
user2102929

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

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

Nous avons trouvé que support-v4 est 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 support-v4 sur Maps utilisera la version fournie par support-v13.

Nous voyons également que la bibliothèque Eclipse utilise une autre version (r7 ??).

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

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

Ensuite, vous devriez pouvoir compiler votre application.

Au fait, vous devriez veiller à ce que le module Eclipse ne soit pas endommagé en testant votre code.

54
xiaomi

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

./gradlew clean
14
MujtabaFR

De document officiel

Si une classe apparaît plusieurs fois sur le chemin d'accès aux classes au moment de l'exécution, vous obtenez une erreur similaire à celle-ci:

Program type already present com.example.MyClass

Cette erreur se produit généralement dans l'une des circonstances suivantes:

  • Une dépendance binaire inclut une bibliothèque que votre application inclut également en tant que dépendance directe.

    Par exemple, votre application déclare une dépendance directe à la bibliothèque A et à la bibliothèque B, mais la bibliothèque A inclut déjà la bibliothèque B dans son binaire. Pour résoudre ce problème, supprimez la bibliothèque B en tant que dépendance directe.

  • Votre application a une dépendance binaire locale et une dépendance binaire distante sur la même bibliothèque.

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

5
Manohar Reddy

Ajouter une bibliothèque de support au fichier Gradle au niveau de l'application

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

3
Phani varma