将 SDK 工具和 ADT 更新到 17,现在获得了 VerifyErrors

Posted

技术标签:

【中文标题】将 SDK 工具和 ADT 更新到 17,现在获得了 VerifyErrors【英文标题】:Updated SDK Tools and ADT to 17 and now getting VerifyErrors 【发布时间】:2012-04-06 17:23:25 【问题描述】:

我有一个引用两个库项目的项目。将 ADT 和 SDK 工具升级到 version 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)

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

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

【问题讨论】:

您是否尝试过清理和重建您的项目? 我刷新、清理、重建、关闭、打开、哭泣和其他一些事情。 ;) 清洁似乎没有改变任何东西,但我发现了一些改变(见下文)。不过谢谢! 【参考方案1】:

我遇到了完全相同的问题。找到这个帖子:How to fix the “NoClassDefFoundError” with ADT 17 让我省心。

【讨论】:

非常感谢您的链接!我所要做的就是将“lib”文件夹重命名为“libs” 也可以使用eclipse的Order and Export功能【参考方案2】:

哇,这太可怕了,但我只是尝试了很多不同的东西,直到它奏效。在这一切的某个地方,它解决了它。 我的库项目有一些 jars 添加到“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”,但我想确保我提到了这一切,以防它帮助任何其他开发人员在他们心中经历恐惧和恐慌。祝你好运!

【讨论】:

【参考方案3】:

@kargi

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

【讨论】:

以上是关于将 SDK 工具和 ADT 更新到 17,现在获得了 VerifyErrors的主要内容,如果未能解决你的问题,请参考以下文章

将 Android ADT 工具从 21.0.1 更新到 21.1.0

更新sdk后出现eclipse adt错误[重复]

将 Android SDK 工具从 22.0.1 更新到 22.0.4(最新版本)

如何解决Eclipse更新ADT或者更新SDK的问题

在 SDK/ADT 更新后 Android 库依赖关系被破坏

此 Android SDK 需要 ADT 版本 23.0.0 或更高版本。当前版本是 22.6。请更新 ADT 到最新版本? [复制]