ProGuard 错误找不到超类或接口 org.apache.http.entity

Posted

技术标签:

【中文标题】ProGuard 错误找不到超类或接口 org.apache.http.entity【英文标题】:ProGuard error can't find superclass or interface org.apache.http.entity 【发布时间】:2012-05-26 20:42:10 【问题描述】:

我总是遇到以下错误:

[2012-05-19 17:50:13 - xxx] Warning: there were 13 unresolved references to      program class members.
[2012-05-19 17:50:13 - xxx]          Your input classes appear to be     inconsistent.
[2012-05-19 17:50:13 - xxx]          You may need to recompile them and try again.
[2012-05-19 17:50:13 - xxx]          Alternatively, you may have to specify the option 
[2012-05-19 17:50:13 - xxx]          '-dontskipnonpubliclibraryclassmembers'.
[2012-05-19 17:50:13 - xxx] Error: Please correct the above warnings first.
[2012-05-19 17:55:40 - xxx] Proguard returned with error code 1. See console
[2012-05-19 17:55:40 - xxx] Note: there were 239 duplicate class definitions.
[2012-05-19 17:55:40 - xxx] Warning: org.apache.http.entity.mime.FormBodyPart:    can't find superclass or interface org.apache.james.mime4j.message.BodyPart
[2012-05-19 17:55:40 - xxx] Warning: org.apache.http.entity.mime.HttpMultipart: can't find superclass or interface org.apache.james.mime4j.message.Multipart
[2012-05-19 17:55:40 - xxx] Warning: org.apache.http.entity.mime.MinimalField: can't find superclass or interface org.apache.james.mime4j.parser.Field

我的 proguard.cfg 文件是:

-keep class android.support.v4.app.**  *; 
-keep interface android.support.v4.app.**  *; 
-keep class com.actionbarsherlock.**  *; 
-keep interface com.actionbarsherlock.**  *; 

-keepattributes *Annotation*
-keepattributes SourceFile, LineNumberTable

-libraryjars /libs/crittercism_v2_0_1.jar
-libraryjars /libs/dropbox-android-sdk-1.2.2.jar
-libraryjars /libs/FlurryAgent.jar
-libraryjars /libs/httpmime-4.0.3.jar
-libraryjars /libs/json_simple-1.1.jar

我已经添加了我所有的外部库,为什么总是出现这些错误? 有人可以帮忙吗?

编辑 21.05.2012: 问题是如果你添加“Dropbox”jar 和“ActionBarSherlock”。 如果我只添加“Dropbox”,我没有问题。 如果我只添加“ActionBarSherlock”,我没有问题。 但如果我同时添加两者,我会得到上面的错误。

【问题讨论】:

【参考方案1】:

如果您已将“ActionBarSherlock”和“DropBox”jar 添加到您的项目中,则存在问题。 要解决此问题,请将以下行添加到您的 proguard-project.txt 文件中:

-dontwarn org.apache.**

警告将被忽略,它会起作用,因为每个罐子都在单独工作。 所以我认为,如果两者都添加,这将是 ProGuard 中的错误。

【讨论】:

它不起作用,错误是:Warning:a.a$a: can't find referenced field 'org.apache.http.HttpEntity WrapEntity' in program class a.a$a @Kenji:对不起,我不再使用 ActionBarSherlock,所以我帮不了你。 @BinilS:“API 不会使用 org.apache 调用”是什么意思?【参考方案2】:

您可能需要:

-保留类 org.apache.http.**

-保持接口org.apache.http.**

这当然是假设 ProGuard 抱怨 apache 类。诚然,我有些猜测,因为我不是 ProGuard 方面的专家。

【讨论】:

是的,我认为这是一个解决方案,但我不想保留它,因为我不使用它。以及我添加到 libraryjars 的所有外部 jars!那么为什么我会收到这个错误呢? 您可能别无选择。查看 ProGuard 示例页面有帮助吗? proguard.sourceforge.net/index.html#manual/examples.html 这不能解决问题 - 使用上面的@chrisonline。 我的答案可能确实不正确,但关闭警告也不是一个好主意,你只是在隐藏我相信的问题。需要对问题进行进一步调查以了解它。

以上是关于ProGuard 错误找不到超类或接口 org.apache.http.entity的主要内容,如果未能解决你的问题,请参考以下文章

ADT R22 - Proguard - 找不到引用的类

Proguard - 找不到常见的超类/java.lang.VerifyError

错误:找不到常见的超类

从 Proguard 获取“未解决的引用”和“找不到超类”警告

Android proguard minifyEnabled true + multidex = error

Proguard和mixpanel问题