3

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

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

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

更新

我尝试配置 ProGuard 以查看生成的内容,但这是一个关于类和方法的警告的永无止境的兔子洞。最后我只是-ignorewarnings为了得到一些输出。

更新2

我仔细查看了错误消息,它实际上丢失了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?

答案/解决方案

请参阅我对@pjco 的回复。

4

1 回答 1

0

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

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

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

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

于 2013-12-13T01:55:52.437 回答