我有一个针对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。
答案 0 :(得分:0)
Proguard默认不运行。当内部类尝试访问外部实例中的某些内容时,编译器会生成$1
方法。带有美元符号和数字的方法与Proguard无关。 Proguard用字母(a,b,c等)命名方法。
默认情况下应导出libs
文件夹。您不需要在最新版本的ADT上配置构建路径(23)。
请务必更新ADT /构建工具。尝试在eclipse中使用向导启动一个新项目,并将jar放在libs文件夹中。然后从MainActivity
调用jar中的某个函数。
不更改Java build path
或任何其他类似设置上的任何内容