it-swarm.com.de

ProGuard: doppelte Definition der Bibliotheksklasse?

Ich führe meinen ProGuard für mein Android-Projekt aus und erhalte folgende Warnungen: 

Note: duplicate definition of library class [org.Apache.http.conn.scheme.HostNameResolver]
Note: duplicate definition of library class [org.Apache.http.conn.scheme.SocketFactory]
Note: duplicate definition of library class [org.Apache.http.conn.ConnectTimeoutException]
Note: duplicate definition of library class [org.Apache.http.params.HttpParams]
Note: duplicate definition of library class [Android.net.http.SslCertificate$DName]
Note: duplicate definition of library class [Android.net.http.SslError]
Note: duplicate definition of library class [Android.net.http.SslCertificate]

Note: there were 7 duplicate class definitions.

Ich habe hier gefunden, um dies zu beheben, indem ich es ignoriere mit: 

-keep class org.Apache.http.** { *; }
-dontwarn org.Apache.http.**
-keep class Android.net.http.** { *; }
-dontwarn Android.net.http.**

Ich sehe keine Möglichkeit, die Duplikate aus den verwendeten Bibliotheken zu entfernen. Auch nach der Verwendung von dontwarn verschwinden die Warnungen nicht.

Ist dies der richtige Weg, um diese Warnung nur zu ignorieren, oder könnte dies zu Problemen führen? 

74
confile

Wenn Sie eine Proguard-Option -printconfiguration config.txt hinzufügen, werden Proguard-Adds angezeigt 

-Bibliothek "D:\Tools\Android\Plattformen\Android-23\Android.jar"

-Libraryjars 'D:\Tools\Android\Plattformen\Android-23\optional\org.Apache.http.legacy.jar'

ihre duplizierten Klassen (z. B. SslError) werden in Android.jar und org.Apache.http.legacy.jar angezeigt

Proguard fügt ein zweites Glas hinzu, auch wenn Sie nicht useLibrary 'org.Apache.http.legacy' hier sind. Hier ist ein offener Fehler , der das Problem beschreibt.

Also können wir jetzt nichts mit dem Thema anfangen. Ignoriere es einfach:

-dontnote Android.net.http.*
-dontnote org.Apache.commons.codec.**
-dontnote org.Apache.http.**

Es ist nicht notwendig, die Klassen so lange zu behalten, wie sie sich im Bibliotheksbehälter befinden (die Bibliothek des Telefons). dontwarn funktioniert nicht, weil es keine Warnung ist, sondern eine Notiz.

87
Flavio

Wahrscheinlich haben Sie "-injars" und -libraryjars "in Ihrer proguard-project.txt erwähnt, da das neueste Build-System für Sie die Erwähnung dieser Elemente berücksichtigt. Sie müssen es also nicht noch einmal erwähnen.

source: http://proguard.sourceforge.net/manual/troubleshooter.html#duplicateclass

Ich denke, das wird helfen. :) 

6
Sankalp Pandya

Sie können gradle anweisen, doppelte Klassen nicht zuzulassen (nehmen Sie nur die erste), indem Sie Ihrem build.gradle Folgendes hinzufügen:

jar {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
0
voxoid