7

我有一个引用两个库项目的项目。将 ADT 和 SDK 工具升级到版本 17后,应用程序在遇到对库项目之一中定义的类的引用时立即崩溃。错误如:

Unable to resolve superclass of Lcom/my/package/name/MyActivity; (118)
Link of class 'Lcom/my/package/name/MyActivity;' failed
VFY: unable to find class referenced in signature (Lcom/my/package/name/MyActivity;)

和:

 FATAL EXCEPTION: main
  java.lang.VerifyError: my/package/name/util/SomeClass
    at my.package.name.App.onCreate(App.java:120)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3925)
    at android.app.ActivityThread.access$1300(ActivityThread.java:122)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4340)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

(我的包和类不是这样命名的,只是为了在此处发布而对其进行了修改)

关于这里发生的事情有什么想法吗?据我所知,没有构建错误,而且我的项目看起来正确引用了库项目。

4

3 回答 3

12

我有同样的问题。找到这篇文章:如何使用 ADT 17 修复“NoClassDefFoundError”让我有些沮丧。

于 2012-03-22T10:28:41.247 回答
4

唷,这很可怕,但我只是尝试了很多不同的东西,直到它起作用。在这一切的某个地方,它解决了它。我的库项目有一些 jar 添加到“lib”文件夹并附加到构建路径。

我阅读了此更改日志注释:http ://tools.android.com/recent/dealingwithdependenciesinandroidprojects关于库和依赖项的更改。我注意到了这一点:

项目具有源文件夹,以及库项目和 jar 文件依赖项。除了在 project.properties 中添加库项目作为依赖项之外,不需要其他设置,项目的类路径会自动填充:

The content of the project’s libs/*.jar
The output of the Library Projects.
The Library Projects’ libs/*.jar

出于某种原因,我的库项目的文件夹被命名为“lib”而不是“libs”。我一直以这种方式使用它近两年没有任何问题,但我继续将其更改为“libs”。然后我刷新了项目,关闭了“is Library”标志,然后再次打开以确保它看到了这种变化。

此外,使用新工具,他们提到它可以处理在引用该库的项目中包括库项目的 jar。到目前为止,我已经手动将库项目的 jar 添加到引用项目中。所以我进入了引用项目,并从构建路径中删除了 jars。然后我进入项目属性并删除库项目并重新添加它。

最后,我注意到库项目的文件夹中有一个 jar 文件,但没有被使用。它只是在文件夹中。我删除了那个文件。

所以在那里的某个地方它又开始工作了。我想真正的解决方法是将“lib”更改为“libs”,但我想确保我提到了这一切,以防它帮助任何其他开发人员在他们心中经历恐惧和恐慌。祝你好运!

于 2012-03-22T06:46:29.980 回答
1

@kargi

通常,我认为这里这里的解决方案是一种非常糟糕的做法。Maven 早就解决了这个荒谬的 lib 文件夹业务,但是 Maven 构建 Android 的效率也不是很高,所以我建议使用 Eclipse 导出功能,正如我在这里描述的那样。

于 2012-03-27T13:27:46.320 回答