ProGuard: double définition de la bibliothèque de la classe?

j'exécute mon ProGuard pour mon projet Android et j'obtiens les avertissements suivants:

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.

j'ai trouvé ici pour corriger cela avec l'ignorer:

-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-keep class android.net.http.** { *; }
-dontwarn android.net.http.**

Je ne vois pas comment supprimer les doublons des bibliothèques utilisées. Même après avoir utilisé dontwarn les avertissements ne disparaissent pas.

est - ce la bonne façon de gérer cet avertissement en l'ignorant simplement ou pourrait-il conduire à des problèmes?

71
demandé sur Community 2015-10-10 01:03:47

4 réponses

si vous ajoutez une option proguard -printconfiguration config.txt vous verrez proguard ajoute

- libraryjars "D:\tools\android\platforms\android-23\android.jar'

- libraryjars "D:\tools\android\platforms\android-23\optional\org.Apache.http.héritage.jar'

vos classes dupliquées (par exemple SslError) sont présentées dans les deux android.jar et org.Apache.http.héritage.jar

ajoute Proguard deuxième pot même si vous ne le faites pas useLibrary 'org.apache.http.legacy' Voici un Bogue ouvert décrivant le problème.

donc maintenant nous ne pouvons rien faire avec le problème. Il suffit de l'ignorer:

-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**

il n'y a pas besoin de garder les cours tant qu'ils sont situés dans la bibliothèque jar (bibliothèque de téléphone en fait). dontwarn ne fonctionne pas parce que ce n'est pas un avertissement, c'est une note.

83
répondu Flavio 2016-03-02 09:09:38

probablement, vous avez mentionné "- injars" et "libraryjars" dans votre projet.txt, considérant le dernier système de construction prend soin de les mentionner pour vous ..donc vous n'avez pas besoin de le mentionner à nouveau.

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

je pense que ça va aider.:)

6
répondu Sankalp Pandya 2015-11-18 14:42:36

vous pouvez dire à gradle de ne pas autoriser les classes dupliquées (ne prenez que la première) en ajoutant ce qui suit à votre build.gradle:

jar {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
0
répondu voxoid 2016-10-17 02:35:24

Vous pouvez l'essayer dans votre construction.Grad pour tout ce qui est indiqué comme dupliqué dans les logs. Je ne suis pas sûr que cela fonctionne, alors essayez-le et informez-nous si cela fonctionne ou non.

packagingOptions {
        exclude 'android.net.http.SslCertificate'
    }
-5
répondu Amit Tiwari 2016-03-02 13:28:12