引用 .jar 库时出现无法解析超类错误

31
  1. 我做了一个Android项目并运行它。它成功地运行了。
  2. 我使用Java开发了一个Web服务并进行了主机托管。它也成功地运行了。
  3. 我将WebService导出为.jar文件并将其添加到我的Android项目中。
  4. 当我尝试调用Web服务中的方法时,我收到了一个“无法解析超类”的错误。

我的错误日志:

Unable to resolve superclass of Lweb/service/RandomWordGeneratorService; (73)
Link of class 'Lweb/service/RandomWordGeneratorService;' failed 
Could not find class 'web.service.RandomWordGeneratorService',
    referenced from method tam.miru.Login$1.onClick
VFY: unable to resolve new-instance 110 Lweb/service/RandomWordGeneratorService;)
    in Ltam/miru/Login$1; 
VFY: replacing opcode 0x22 at 0x005a    
VFY: dead code 0x005c-006e in Ltam/miru/Login$1;.onClick (Landroid/view/View;)
8个回答

71

在升级到ADT 17后,刚开始遇到了这个问题。

发现外部的.jar文件必须放在一个名为“libs”(有s)的文件夹中,否则它们的类不会被包含在创建的.dex文件中。在升级之前,我的.jar文件位于'lib'(无s)文件夹中,所有工作正常。


4
这是需要翻译的内容:“More info here” 这里有更多信息。链接 - rabidgremlin
1
真是浪费了一个错误。在苦苦思索之前应该先搜索谷歌。感谢@rabidgremlin。 - Jayshil Dave

14
在我的情况下,我必须去到 属性->Java 构建路径->顺序和导出 并勾选 Android 私有库,然后清理项目就可以了。

4
创建lib文件夹,libs文件夹用于本地库。我创建了它,将库添加到lib中,并将其作为内部库添加到构建路径中,它可以正常工作!

2

是的,我创建了 Web 服务 Java 应用程序的 JAR 文件,并将其添加为“ADD EXTERNAL JAR”。 - sakthi
JAR文件中是否定义了web.service.RandomWordGeneratorService类? - Programmer Bruce
是的 :( 我也按照链接创建了一个 libs 文件夹,并将我的 jar 放在那里,但仍然出现相同的错误 :( - sakthi

2
我知道这是一个关于旧帖子的回复,但在阅读了@rabidgremlin的回答后,我检查了文件夹结构并发现它已经在“libs”中。然而,当我看到support.jar时,我想使用它会导致问题。
我正在扩展“FragmentActivity”,但事实证明,那引用了support.jar本身就有问题。一旦我删除了extends子句,应用程序就奇迹般地停止崩溃了。
只是提供信息以防其他人寻找。干杯!

1
我遇到了同样的错误信息。花费了一些时间才找出问题所在:Android需要Java 1.6才能正常工作。我的Activity超类实现了一个来自Java项目的接口,该项目使用的是Java 1.7编译器。这足以导致dex构建器无法链接超类,从而导致类未找到异常。

1

我曾经遇到同样的问题,我尝试在“排序和导出”中标记Android私有库,但这对我没有起作用。然后我注意到我的libs文件夹没有在Java构建路径下被引用。所以我只需将其添加到库中即可解决问题。


-1
我在Eclipse中遇到了一个不同的错误原因。我正在尝试将Eclipse工作区放入Google Drive目录中,并发现某些超类无法从Android活动中解析。
暂停Google Drive后,一切都正常工作。在我的情况下,无法加载的超类来自协议缓冲区生成的类。即使在Google Drive运行时,该类和我测试过的所有其他类在非Android Java程序中也可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接