我有一个引用两个库项目的项目。将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)
(我的包和类没有这样命名,只是修改它们以便在这里发布)
关于这里发生了什么的任何想法?据我所知,没有构建错误,我的项目看起来正确引用了库项目。
答案 0 :(得分:12)
我遇到了完全相同的问题。发现这篇文章:How to fix the “NoClassDefFoundError” with ADT 17让我有点沮丧。
答案 1 :(得分:4)
哇,这太可怕但我只是尝试了很多不同的东西,直到它奏效。在所有这一切的某个地方,它解决了它。 我的库项目有一些罐子被添加到“lib”文件夹并附加到构建路径。
我读了这个更改日志说明:http://tools.android.com/recent/dealingwithdependenciesinandroidprojects关于库和依赖项的更改。我注意到了这一点:
项目包含源文件夹,以及Library Project和jar文件依赖项。除了在project.properties中添加Library Projects作为依赖项之外,不需要其他任何设置,项目的类路径将自动填充:
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添加到引用项目中。所以我进入了引用项目,并从构建路径中删除了jar。然后我进入项目属性并删除了库项目并重新添加它。
最后,我注意到一个jar文件在库项目的文件夹中,但没有被使用。它只是在文件夹中。我删除了该文件。
所以在那里的某个地方又开始了。我想真正的解决方法是将“lib”改为“libs”,但我想确保我提到这一切以防万一它可以帮助任何其他开发人员心中产生恐惧和恐慌。祝你好运!
答案 2 :(得分:1)