首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ProGuard:库类定义重复?

ProGuard:库类定义重复?
EN

Stack Overflow用户
提问于 2015-10-10 06:03:47
回答 4查看 39.1K关注 0票数 85

我为我的安卓项目运行我的ProGuard,并得到以下警告:

代码语言:javascript
运行
复制
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可以通过忽略它来修复这个问题:

代码语言:javascript
运行
复制
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-keep class android.net.http.** { *; }
-dontwarn android.net.http.**

我看不到从使用的库中删除重复项的方法。即使在使用dontwarn之后,警告也不会消失。

这是通过忽略它来处理此警告的正确方式吗?还是这会导致问题?

EN

回答 4

Stack Overflow用户

发布于 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。

所以现在我们不能对这个问题做任何事情。忽略它:

代码语言:javascript
运行
复制
-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**

只要这些类位于库jar (实际上是手机的库)中,就没有必要保留这些类。dontwarn不起作用,因为它不是一个警告,而是一个注释。

票数 97
EN

Stack Overflow用户

发布于 2015-11-18 22:42:37

您可能已经在proguard-project.txt中提到过"-injars“和”-libraryjars“,考虑到最新的构建系统会为您提供这两项功能,..so您不必再提了。

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

我认为这会有所帮助。:)

票数 6
EN

Stack Overflow用户

发布于 2016-10-17 10:35:25

您可以通过在build.gradle中添加以下内容来告诉gradle不要允许重复的类(只接受第一个):

代码语言:javascript
运行
复制
jar {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33047806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档