0

Während das Projekt läuft erhalte ich diesen Fehlerjava util zip ZipException: doppelte Eintrag

Error:Execution failed for task ':..........'. com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: javax/annotation/CheckForNull.class

Dies ist, wie meine App: gradle wie folgt aussieht:

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 24 
buildToolsVersion "24.0.3" 
useLibrary 'org.apache.http.legacy' 

defaultConfig { 
    applicationId "com.sample.Example" 
    minSdkVersion 15 
    targetSdkVersion 24 
    multiDexEnabled true 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 
} 

dependencies { 
compile (project(':library')){ 
    exclude module: 'support-v4' 
} 
compile (project(':facebookLib')){ 
    exclude module: 'support-v4' 
} 
compile 'com.google.http-client:google-http-client-gson:1.20.0' 
compile 'com.google.code.gson:gson:2.4' 
compile files('libs/CWAC-SackOfViewsAdapter.jar') 
compile files('libs/FlurryAgent.jar') 
compile files('libs/google-api-client-1.15.0-rc.jar') 
compile files('libs/google-api-client-android-1.15.0-rc.jar') 
compile files('libs/google-api-services-androidpublisher-v1-rev15-1.15.0-rc.jar') 
compile files('libs/google-http-client-1.15.0-rc.jar') 
compile files('libs/google-http-client-android-1.15.0-rc.jar') 
compile files('libs/google-http-client-jackson-1.15.0-rc.jar') 
compile files('libs/google-http-client-jackson2-1.15.0-rc.jar') 
compile files('libs/google-oauth-client-1.15.0-rc.jar') 
compile files('libs/google-oauth-client-java6-1.15.0-rc.jar') 
compile files('libs/httpmime-4.2.jar') 
compile files('libs/in-app-purchasing-1.0.3.jar') 
compile files('libs/jackson-core-2.1.3.jar') 
compile files('libs/jackson-core-asl-1.9.11.jar') 
compile files('libs/json_simple-1.1.jar') 
compile files('libs/jsr305-1.3.9.jar') 
compile files('libs/picasso-2.1.1.jar') 
compile files('libs/signpost-commonshttp4-1.2.1.1.jar') 
compile files('libs/signpost-core-1.2.1.1.jar') 
compile files('libs/signpost-jetty6-1.2.1.1.jar') 
compile files('libs/twitter4j-core-4.0.1.jar') 
compile files('libs/amazon-device-messaging-1.0.1.jar') 
compile 'com.google.android.gms:play-services:9.6.1' 
compile 'com.android.support:appcompat-v7:24.2.1' 
compile 'com.android.support:support-v4:24.2.1' 
compile 'com.android.support:design:24.2.1' 
compile 'com.android.support:recyclerview-v7:24.2.1' 
compile 'com.android.support:cardview-v7:24.2.1' 
compile 'com.android.support:multidex:1.0.1' 
} 

Volley: gradle

android { 
compileSdkVersion 17 
buildToolsVersion "24.0.3" 

defaultConfig { 
    minSdkVersion 8 
    targetSdkVersion 8 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 
} 

Bibliothek: Gradle

android { 
compileSdkVersion 16 
buildToolsVersion "23.0.3" 

defaultConfig { 
    minSdkVersion 4 
    targetSdkVersion 4 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 
} 

dependencies { 
compile 'com.android.support:support-v4:18.0.0' 
} 

facebookLib: gradle

android { 
compileSdkVersion 17 
buildToolsVersion "24.0.3" 

defaultConfig { 
    minSdkVersion 8 
    targetSdkVersion 8 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 
} 

dependencies { 
compile 'com.android.support:support-v4:18.0.0' 
} 

jemand einen Ausweg aus diesem Fehler vorschlagen kann? Vielen Dank im Voraus.

Antwort

3
com.android.support:support-v4:_____ 

Diese Bibliothek wird mehrmals verwendet. Also, hier ist, was Sie tun können. tun dies entweder auf Ihrer Bibliothek gradle oder facebooklib des gradle:

compile(project(':facebookLib')) { 
    exclude module: 'support-v4' 
} 

ODER

compile(project(':library')) { 
    exclude module: 'support-v4' 
} 

Tipp: Sie sollten eine gradle Aufgabe machen Ihre Abhängigkeiten zu drucken, wenn Gebäude und einen Blick darauf werfen. Sehen Sie, wenn es etwas gibt, Sie entfernen können/verbessern

EDIT:

Lauf dieser Befehl im Terminal Tab Ihres Android Studio.

./gradlew app:dependencies 

Dies wird alle Abhängigkeiten und ihre (Teil-) Abhängigkeiten ausgeben. Schauen Sie durch und sehen Sie, welche der Abhängigkeiten zweimal aufgerufen wird.

Jedes Mal, wenn Sie die gleiche Bibliothek zweimal sehen, müssen Sie die oben gezeigte Methode exclude verwenden, um das Moudle oder die Gruppe auszuschließen.

Weitere Informationen finden Sie hier. Es ist eine nette und einfache Erklärung. https://www.linkedin.com/pulse/how-find-dependencies-particular-dependency-gradle-hesamedin-kamalan-1

+0

einen Fehler bekommen, während gradle sync > Methode nicht ausschließen finden kann () für Argumente [{module = support-v4}] für das Projekt ': library' vom Typ org.gradle.api.Project. – Shahal

+0

@Shahal Blick auf meine Bearbeitung. Es ist ein Projekt, also brauchen Sie einen zusätzlichen Satz Klammern. Ich habe das vergessen: \ –

+0

bekomme die selbe Ausnahme. aber exclude() hat keinen Fehler gemacht. – Shahal

0

Sie müssen keine gleichen Abhängigkeiten in jedem einzelnen Modul kompilieren, wie Ihre App: gradle kompiliert 'com.android.support:support-v4:24.2.1' , die bereits in Ihrer Bibliothek gradle als 'com.android.support:support-v4:18.+ kompiliert wurde ", wo ich sehen kann, die Sie hinzugefügt Bibliotheksmodul haben als Eine Abhängigkeit von App: Gradle, hier versuchen Sie es zu replizieren. Gleiches gilt auch für andere Module. Sofern sie nicht unabhängig sind.

Tipp: Verwenden Sie keine anonymen Versionen wie 'com.android.support:support-v4:18.+', sondern verwenden Sie entsprechende Versionen.

0

Führen Sie den folgenden Duplikate

task findDuplicates { 
    doLast { 
     String findMe = 'javax/annotation/CheckForNull.class' 
     configurations.compile.files.each { file -> 
     if (file.name.endsWith('.jar')) { 
      def classMatches = zipTree(file).matching { 
       include findMe 
      }.files 
      if (!classMatches.empty) { 
       println "Found $findMe in $file ${classMatches.size()} time(s)" 
      } 
     } 
     } 
    } 
} 
+0

Ich kann das Projekt nicht an erster Stelle ausführen, um all dies zu tun. – Shahal

+0

Ja, Sie können 'grandle findDuplicates' ausführen, nachdem Sie meinem' build.gradle' mein Snippet hinzugefügt haben. –

+1

Ich erhalte "Fehler: (28, 1) Ausführung fehlgeschlagen für Aufgabe ': findDuplicates'. > konnte nicht unbekannte Eigenschaft 'Laufzeit 'für Konfigurationscontainer. " – Giszmo

1

Sie könnten eine Abhängigkeiten Bereinigung tun in Android Studio zu finden. Dabei finden Sie die referenzierten Bibliotheken pro Modul in der Baumansicht. Auf diese Weise werden Sie feststellen, welche Abhängigkeiten den doppelten Eintragsfehler erzeugen. Suchen Sie in Ihrem Projekt, welche Dateien o CheckForNull.class verwenden. Notieren Sie das Paket, das es enthält.

Öffnen Sie das Terminal-Fenster in Ihrem Projekt und excecute die Folge Befehl

gradlew clean app:dependencies 

Bitte beachten Sie, dass alle Abhängigkeiten und erneut heruntergeladen entfernen wird. Wenn Sie viele Bibliotheken haben, kann es einige Minuten dauern, bis Sie sie erneut herunterladen können. Danach finden Sie eine Zusammenfassung, wo Sie das Paket filtern können, das Sie finieren. In meinem Fall war das Problem mit dem Paket apache.commons. Ich mache den Filter und so etwas wie dieses finden:

+--- com.amazonaws:aws-android-sdk-s3:2.4.0 
| +--- com.amazonaws:aws-android-sdk-core:2.4.0 (*) 
| +--- com.amazonaws:aws-android-sdk-kms:2.4.0 
| | \--- com.amazonaws:aws-android-sdk-core:2.4.0 (*) 
| +--- org.apache.commons:commons-io:1.3.2 
| | \--- commons-io:commons-io:1.3.2 -> 2.4 
| +--- commons-io:commons-io:2.4 
| \--- org.bouncycastle:bcprov-jdk16:1.44 

In meinem Fall war es ein doppelter Eintrag erzeugt durch AWS Android SDK auf die commons-io Abhängigkeit verwiesen.

schließlich nur den Ausschluß in Ihrer gradle Datei machen wie diese (Denken Sie daran, dass es in meinem Fall eine diffenrt Abhängigkeit):

compile('com.amazonaws:aws-android-sdk-s3:2.4.0') 
     { 
      exclude group: 'org.apache.commons' 
     } 
Verwandte Themen