Okhttp NoClassDefFoundError
Posted
技术标签:
【中文标题】Okhttp NoClassDefFoundError【英文标题】: 【发布时间】:2014-08-27 00:06:45 【问题描述】:我在 Eclipse 上的 android 应用程序中使用 OkHttp 2.0.0 jar。由于 OkHttp 现在依赖于 Okio 库,我还在我的项目中添加了 Okio 1.0.0 jar。该项目编译良好,没有编译错误,但是当我在我的 android 设备上运行时,它给了我这个 NoClassDefFoundError
所有与 OkHttp 相关的内容库类。
我已将所有 jars 放在项目的 libs 文件夹中,并将它们添加到我的构建路径中,并尝试在“导出和订购”选项卡中检查它们,但仍然无法正常工作。
我想知道,由于 okhttp 依赖于 okio,是否只添加两个 jar 就可以正常工作,或者我必须做任何不同的事情。
我也尝试过 volley jar,它工作正常,没有任何问题。任何人都可以在这里帮助我,这个问题现在存在 3 到 4 天。
更新 我还尝试了 android studio 并在构建依赖项中添加了 okhttp 库,但仍然无法正常工作。
【问题讨论】:
【参考方案1】:OkHttp v2.0 依赖于 Okio v1.0。你可以下载它的jar here。这对我有用
参考来自 https://github.com/square/okhttp/issues/870
【讨论】:
“这对我有用”是什么意思。您是否刚刚将该库导入到项目中? 下载jar文件并在模块中添加jar引用【参考方案2】:在 OkHttp 2.0.0 中,语言级别已更新到 Java 7。
在此处查看更改日志https://github.com/square/okhttp/blob/master/CHANGELOG.md
为了解决这个问题,您需要更新到 java 7。
此外,此时您可能还需要将目标 sdk 更改为 kitkat (API 19),并更新您的构建工具等,以使 android 与 java 7 配合得很好
编辑:当我升级到 okHttp 2.0.0 并使用 ant 构建时,我遇到了同样的问题。尽管构建似乎成功了,但我得到了 NoClassDefFoundError。通过我的构建日志,我遇到了一大堆静默错误
第一个来自javac
warning: com/squareup/okhttp/<classname>.class major version 51 is newer than 50, the highest major version supported by this compiler.
第二个来自dex
[dx] trouble processing:
[dx] bad class file magic (cafebabe) or version (0033.0000)
[dx] ...while parsing com/squareup/okhttp/<classname>.class
[dx] ...while processing com/squareup/okhttp/<classname>.class
【讨论】:
我也尝试过下载源代码并尝试自己使用 maven 编译源代码,但仍然无法正常工作。由于 maven 构建成功,这意味着我的 java 版本没有问题(我有 java 7)。同样在更改日志中显示 android 2.3 所以没有问题。 @KishuAgarwal 看看你的构建日志,那里可能有一些提示。我已更新我的答案以显示我遇到此问题时的日志记录 感谢您的回复。你是对的,我确实在我的构建中看到了那些糟糕的类文件魔法错误。我会尝试更新我的 java 版本。 @KishuAgarwal 如果这不能解决问题,请尝试我的答案的第二部分并更新您的构建工具和目标 kitkat 问题已修复。 Java update 没有做任何事情,只是通过将我的 sdk 从 18 更改为 19 解决了这个问题。谢谢你推荐。在这个问题上我很沮丧。【参考方案3】:转到Project/Properties/Java Build Path/Order and Export
-- 如果您使用它,请确保在 Android 依赖项和支持库前面有一个检查。标记所有复选框并单击应用并清理项目。
【讨论】:
以上是关于Okhttp NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章
okhttp和第三方封装好的OKHttp库-okhttp-utils
Android 开源框架 ( 二 ) 基于OkHttp进一步封装的okhttp-utils介绍
Android OkHttp完全解析 是时候来了解OkHttp了