Was bedeutet „Programmtyp bereits vorhanden“?

Lesezeit: 5 Minuten

Ich versuche, eine App in Android Studio zu erstellen. Nachdem ich die Eclipse Paho-Bibliothek als Gradle-Abhängigkeit hinzugefügt habe (oder ist es Maven? Ich bin neu im Android-Ökosystem), habe ich die folgende Fehlermeldung erhalten:

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)}

Ich habe viele verschiedene StackOverflow-Fragen zu diesem Fehler überprüft, aber die Antworten sind alle spezifisch für bestimmte Bibliotheken. Ich suche nicht nur nach einer Lösung für den Fehler, sondern nach einem Verständnis dafür, was der Fehler ist bedeutet. Auf diese Weise wird es für die Menschen einfacher, Lösungen für ihre spezifischen Fälle zu finden. Darauf hat sich bisher keine Antwort gegeben.

Aus anderen StackOverflow-Antworten habe ich entnommen, dass es etwas mit meiner Gradle-Datei zu tun hat. Also, hier ist 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/' }
} 

Was bedeutet „Programmtyp bereits vorhanden
Mujtaba FR

Für mich einfach Reinigung Das Projekt hat das Problem gelöst

Verwenden Terminal :

./gradlew clean

Verwenden Android-Studio :

Build (menu) > Clean Project

  • Richtig! Vielleicht ist es der Fehler von Android Studio.

    – aolphn

    10. Januar 2020 um 1:23 Uhr

  • In Android Studio kann dies auch über das Menü erfolgen Build > Clean Project.

    – Salvador

    19. Januar 2020 um 15:54 Uhr

  • Für Android-Studio File > Invalidate Caches / Restart > Invalidate and restart kann das Problem auch beheben

    – max

    19. Februar 2020 um 19:09 Uhr

  • Diese Antwort erklärt nicht, was der Fehler bedeutet, was die Frage ist.

    – Benutzer2102929

    7. September 2020 um 20:38 Uhr

  • Ich habe die Antwort viele Monate später geschrieben, nur um meine Erfahrungen mit zukünftigen Lesern zu teilen. Sie suchen möglicherweise nach langen Lösungen und Erklärungen, während sie durch einen einfachen Schritt gelöst werden können.. @user2102929

    – MujtabaFR

    7. September 2020 um 20:58 Uhr


Dieses Problem entsteht normalerweise durch einen Namenskonflikt, in Ihrem Fall die Bibliothek support-v4, die von mehreren Bibliotheken verwendet wird.

Um die zu finden Liste der Abhängigkeiten für das Modul app (Name des Standardmoduls für die App) können wir a gradlew app:dependencies um eine Liste aller Bibliotheken abzurufen.

Wir haben das gefunden support-v4 wird verwendet von:

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

Wir sehen, dass support-v4 auf Maps die von support-v13 bereitgestellte Version verwendet.

Wir sehen auch, dass die Eclipse-Bibliothek eine andere Version verwendet (r7 ??).

Um Ihr Problem zu lösen, können Sie versuchen, das Modul auszuschließen support-v4 aus dieser Eclipse-Bibliothek wie folgt:

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

Dann sollten Sie in der Lage sein, Ihre Bewerbung zusammenzustellen.

Übrigens sollten Sie darauf achten, dass das Eclipse-Modul nicht kaputt geht, indem Sie Ihren Code testen.

  • Ich hatte einen völlig anderen Konflikt, aber Ihre Antwort hat mir geholfen, auf die Idee zu kommen, dass etwas kollidieren könnte. Ich habe 2 verschiedene Player verwendet, die den Android Exo Player verwenden. Kann jemandem eines Tages helfen. Danke!

    – Vucko

    13. August 2018 um 11:49 Uhr

  • @Vucko Wie hast du Kollision identifiziert?

    – Vir Rajpurohit

    10. Oktober 2018 um 5:48 Uhr

  • Durch pures Glück. Ich begann zu recherchieren und stellte fest, dass meine Brightcove-Videoplayer-Bibliothek Exoplayer als Abhängigkeit verwendet. Probieren Sie aus, was das für Sie sein könnte.

    – Vucko

    10. Oktober 2018 um 12:58 Uhr

Von offizielles Dok

Wenn eine Klasse mehr als einmal im Laufzeitklassenpfad vorkommt, erhalten Sie eine Fehlermeldung ähnlich der folgenden:

Program type already present com.example.MyClass

Dieser Fehler tritt normalerweise aufgrund einer der folgenden Umstände auf:

  • Eine binäre Abhängigkeit enthält eine Bibliothek, die Ihre App auch als direkte Abhängigkeit enthält.

    Beispielsweise deklariert Ihre App eine direkte Abhängigkeit von Bibliothek A und Bibliothek B, aber Bibliothek A enthält bereits Bibliothek B in ihrer Binärdatei. Um dieses Problem zu beheben, entfernen Sie Bibliothek B als direkte Abhängigkeit.

  • Ihre App hat eine lokale binäre Abhängigkeit und eine entfernte binäre Abhängigkeit von derselben Bibliothek.

    Um dieses Problem zu beheben, entfernen Sie eine der binären Abhängigkeiten. (Sehen Sie, ob dieselbe Bibliothek als jar- und gradle-Abhängigkeit hinzugefügt wird)

  • Vielen Dank. 1. war die Ursache des Problems für mich. Ich habe compileOnly für die wiederholte Bibliothek verwendet, die sich in einer anderen Bibliothek befindet, die der Build beim Erstellen ausschließt.

    – Monstergehirn

    2. April 2020 um 12:14 Uhr

1646243587 512 Was bedeutet „Programmtyp bereits vorhanden
mexikanischer juadha

Es ist mir auch passiert, aber in meinem Fall versuche ich, verschiedene Abhängigkeiten einzuschließen, die dieselbe Klasse verwenden debugApi & Api Also wurde Android Studio als doppelte Klasse markiert, also habe ich das Problem mit gelöst debugApi & releaseApi um verschiedene Abhängigkeiten basierend auf der Build-Variante aufzunehmen.

In meinem Fall bedeutet dies, dass ich 2 * .jar-Dateien oder 2 Bibliotheken irgendwo im Quellcode habe. Beispiel: Ich habe 2 youtube.jar in app/libary und module/libary
Löschen Sie das Überflüssige einmal und es wird in Ordnung sein

  • Jawohl! Dieser hat mir geholfen!

    – Juri Popiw

    26. Juli 2021 um 17:56 Uhr

Was bedeutet „Programmtyp bereits vorhanden
Phani Varma

Hinzufügen der Support-Bibliothek zur Gradle-Datei auf App-Ebene

Implementierung „com.android.support:design:27.1.0“

  • Jawohl! Dieser hat mir geholfen!

    – Juri Popiw

    26. Juli 2021 um 17:56 Uhr

1646243588 867 Was bedeutet „Programmtyp bereits vorhanden
Ranjithkumar

Problem für dieses Problem – Wenn Sie die Bibliothek als Modul und dieselbe Bibliothek als Abhängigkeit in einer anderen Bibliothek verwenden.

Beispiel: BibliothekA importiert als Modul & gleich BibliothekA als Abhängigkeit in einem anderen Bibliotheksmodul hinzugefügt.

Wie kann dieses Problem behoben werden?

Lösung 1 -> wenn Sie beide behalten möchten -> Refaktorieren Sie einfach den Paketnamen von BibliothekA Modul

Lösung 2 -> entfernen Sie die BibliothekA Abhängigkeit und verwenden Sie das Modul

Implementierungsprojekt(‘:LibraryA’)

914620cookie-checkWas bedeutet „Programmtyp bereits vorhanden“?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy