Android: Dupliziere Klassenfehler in prouard

9

Beim Kompilieren meiner App erhalte ich den folgenden Fehler (empfindliche Pfadabschnitte wurden herausgefiltert)

%Vor%

Dies deutet darauf hin, dass der Compiler zwei Orte sieht, an denen die App versucht, commons.codec.binary.Base64.class als Abhängigkeit zu verwenden. Ich habe meine Bibliotheken erneut überprüft und überprüft, aber nur eine Bibliothek (Amazon AWS) versucht, sie zu verwenden.

Über diesem Fehler erhebe ich einige andere Warnungen, die auch eine rote Fahne für mich aufwerfen:

%Vor%

Ich verwende commons-codec-1.4 oder commons-lang3-3.1 in meiner App nicht explizit. Ich dachte, ich benutze lang3, bevor ich es später entferne. Warum werden diese im Kompilierprotokoll referenziert? Könnte eine meiner Maven-Bibliotheken sie benutzen? Ich werde eine Liste von Maven-Bibliotheken unten in meiner Gradle-Datei einschließen.

Hier sind meine Proguard- und Gradle-Dateien als Referenz:

PROGUARD

%Vor%

GRADLE

%Vor%

Meine beste Vermutung ist, dass eine oder mehrere dieser Bibliotheken apache lang3 und Codec als Abhängigkeiten ihrer eigenen verwendet, was zu einem Konflikt führt, wenn ich die App kompiliere. Dieses Problem tritt nur auf, wenn ich Amazon als ein erforderliches Glas einschließe, also weiß ich, dass das in gewisser Weise als der Täter fungiert, aber ich weiß nicht, was sonst noch damit kollidiert.

Ich habe etwas über die Verwendung von -injars mit proguard gelesen, aber laut ihrer Dokumentation sollte Android Sie nicht brauchen, um das zu verwenden.

Jeder Rat würde sehr geschätzt werden, danke!

    
JMRboosties 05.09.2014, 00:02
quelle

2 Antworten

2

Ich bin mir nicht sicher, ob dir das helfen wird oder nicht, aber ich schreibe hier meine Antwort, falls andere das für nützlich halten. Mein Problem war, dass ich 2 Referenzen in meiner Abhängigkeitsanweisung hatte. Ich habe die Universal Image Loader-Bibliothek verwendet und meine Anweisung sah folgendermaßen aus:

%Vor%

Das Problem dabei war, dass ich bereits über den libs -Ordner auf UIL referenziert hatte (dh er wurde bereits von der Anweisung compile fileTree(dir: 'libs', include: ['*.jar']) kompiliert) libs und einmal über den expliziten Aufruf, um den Verweis auf UIL zu kompilieren. Ich habe den expliziten Aufruf entfernt und das hat den Fehler behoben. Vielleicht rufst du etwas in deinem libs -Verzeichnis an, das dann auch einen Verweis auf die betreffende Bibliothek enthält es versucht, die AWS-Dienste zu kompilieren, es hat bereits eine Version der Commons-Bibliothek und kotzt.

    
akousmata 18.05.2015 19:23
quelle
0

Die Ursache dieses Problems liegt in der Duplizierung von JAR-Dateien.

Versuchen Sie in Ihrem Projektverzeichnis,

zu finden und zu löschen
  

/projects/app/build/intermediates/classes-proguard/debug/classes.jar] (Kann nicht lesen [/. Gradle / Caches / Modules-2 / Files-2.1 / Commons-Codec / Commons-Codec / 1.4 / 4216af16d38465bbb0f3dff8efa14204f7a399a / commons-codec-1.4.jar

diese JAR-Datei und sehen, ob sich etwas ändert. Wenn es Commons-lang3-3.1.jar im selben oder oberen dirrectory gibt, versuchen Sie es auch zu löschen und neu aufzubauen.

Ich hoffe, es hilft!

    
Shawn 24.10.2014 06:58
quelle

Tags und Links