Android中的Jersey 2.4.1客户端的NoClassDefFoundError

时间:2013-12-08 04:52:32

标签: android noclassdeffounderror jersey-client

我有一个针对API 17的Android项目,需要使用Jersey 2.4.1 REST服务。但是,在运行时我不断为org.glassfish.jersey.model.internal.CommonConfig$1获取NoClassDefFoundError。这个类位于我需要的客户端代码的Jersey JAR文件中。

我已按照其他帖子中有关libs Android依赖项修复的说明,例如Android java.lang.NoClassDefFoundError但我仍然遇到了问题。 JAR位于libs目录中,我检查了构建路径中的导出选项。有什么奇怪的是我在这个lib中有其他的球衣罐正在工作,它似乎似乎没有找到这个。

我已经尝试清理项目,刷新它,删除并重新添加JAR但我似乎无法让它工作。它所抱怨的类是在jersey-common-2.4.1.jar中,我可以在Eclipse工作区中看到,所以正确的JAR就在那里,似乎它没有与APK一起导出。

更新

我尝试配置ProGuard以查看产生的内容,但它是关于类和方法的警告的永无止境的兔子洞。最后,我只是将-ignorewarnings放入以获取输出内容。

UPDATE2

我仔细查看了错误消息,但它实际上缺少org.glassfish.jersey.model.internal.CommonConfig$1(请注意$ 1)。这是一个静态的内部类,这让我几乎可以肯定它是一个ProGuard配置问题。我尝试添加:

-keepclasseswithmembers class org.glassfish.jersey.**
-keepclasseswithmembers class javax.ws.rs.**

到我的proguard-project.txt文件,但我仍然得到NoClassDefFoundError。我怎样才能告诉Eclipse / ProGuard完全保留我的库jar以用于两种构建选项(右键单击部署和导出)?

ANSWER /解决方案

请参阅我的评论以回应@pjco。

1 个答案:

答案 0 :(得分:0)

Proguard默认不运行。当内部类尝试访问外部实例中的某些内容时,编译器会生成$1方法。带有美元符号和数字的方法与Proguard无关。 Proguard用字母(a,b,c等)命名方法。

默认情况下应导出libs文件夹。您不需要在最新版本的ADT上配置构建路径(23)。

请务必更新ADT /构建工具。尝试在eclipse中使用向导启动一个新项目,并将jar放在libs文件夹中。然后从MainActivity调用jar中的某个函数。

更改Java build path或任何其他类似设置上的任何内容