我为我的安卓项目运行我的ProGuard,并得到以下警告:
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.
我发现here可以通过忽略它来修复这个问题:
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-keep class android.net.http.** { *; }
-dontwarn android.net.http.**
我看不到从使用的库中删除重复项的方法。即使在使用dontwarn
之后,警告也不会消失。
这是通过忽略它来处理此警告的正确方式吗?还是这会导致问题?
发布于 2016-03-02 17:09:39
如果您添加了proguard选项-printconfiguration config.txt
,您将看到proguard adds
-libraryjars 'D:\tools\android\platforms\android-23\android.jar‘
-libraryjars 'D:\tools\android\platforms\android-23\optional\org.apache.http.legacy.jar‘
您的重复类(例如SslError)在android.jar和org.apache.http.legacy.jar中都会出现
open bug添加了第二个jar,即使你不这样做。这里是一个描述这个问题的jar。
所以现在我们不能对这个问题做任何事情。忽略它:
-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**
只要这些类位于库jar (实际上是手机的库)中,就没有必要保留这些类。dontwarn不起作用,因为它不是一个警告,而是一个注释。
发布于 2015-11-18 22:42:37
您可能已经在proguard-project.txt中提到过"-injars“和”-libraryjars“,考虑到最新的构建系统会为您提供这两项功能,..so您不必再提了。
来源:http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass
我认为这会有所帮助。:)
发布于 2016-10-17 10:35:25
您可以通过在build.gradle中添加以下内容来告诉gradle不要允许重复的类(只接受第一个):
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
https://stackoverflow.com/questions/33047806
复制相似问题