Je lance mon ProGuard pour mon projet Android et reçois 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 résoudre ce problème en l'ignorant avec:
-keep class org.Apache.http.** { *; }
-dontwarn org.Apache.http.**
-keep class Android.net.http.** { *; }
-dontwarn Android.net.http.**
Je ne vois pas un moyen de 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 ou est-ce que cela pourrait engendrer des problèmes?
Si vous ajoutez une option de proguard -printconfiguration config.txt
, vous verrez que proguard ajoute
-libraryjars 'D:\tools\Android\plates-formes\Android-23\Android.jar'
-libraryjars 'D:\tools\Android\plates-formes\Android-23\facultatif\org.Apache.http.legacy.jar'
vos classes dupliquées (par exemple, SslError) sont présentées à la fois dans Android.jar et dans org.Apache.http.legacy.jar
Proguard ajoute un deuxième fichier jar même si vous n'avez pas useLibrary 'org.Apache.http.legacy'
Voici un open bug décrivant le problème.
Alors maintenant, nous ne pouvons rien faire avec le problème. N'y faites pas attention:
-dontnote Android.net.http.*
-dontnote org.Apache.commons.codec.**
-dontnote org.Apache.http.**
Il n'est pas nécessaire de conserver les classes tant qu'elles se trouvent dans la bibliothèque jar (la bibliothèque du téléphone en fait). dontwarn ne fonctionne pas car ce n'est pas un avertissement, c'est une note.
Probablement, vous avez mentionné "-injars" et -libraryjars "dans votre fichier proguard-project.txt, étant donné que le dernier système de construction prend soin de les mentionner pour vous.
source: http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass
Je pense que ça aidera.:)
Vous pouvez dire à gradle de ne pas autoriser les classes en double (prenez seulement la première) en ajoutant ce qui suit à votre build.gradle:
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}