豆瓣出错:java.lang.NoClassDefFoundError: com.google.gdata.client.douban.DoubanService

来源:互联网 发布:慢跑减肥 知乎 编辑:程序博客网 时间:2024/05/16 12:48

转载:http://www.cnblogs.com/codebubble/archive/2013/04/08/3009115.html

04-11 23:09:23.413: E/AndroidRuntime(5989): FATAL EXCEPTION: main

04-10 23:28:44.894: E/AndroidRuntime(15118): java.lang.NoClassDefFoundError: com.google.gdata.client.douban.DoubanService

NoClassDefFoundError,此错误相关资料,请看以下两个链接:

http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html

http://javarevisited.blogspot.com/2011/07/classnotfoundexception-vs.html

看完上面两个链接内容后,又回去看LogCat消息,在这个错误上面发现如下Log:

04-11 23:09:19.585: W/dalvikvm(5989): Unable to resolve superclass of Lcom/google/gdata/client/douban/DoubanService; (56)

04-11 23:09:19.585: W/dalvikvm(5989): Link of class 'Lcom/google/gdata/client/douban/DoubanService;' failed

04-11 23:09:19.585: E/dalvikvm(5989): Could not find class 'com.google.gdata.client.douban.DoubanService', referenced from method com.douban.android.ActivityAuth.getRequestUrl

这就终于明白了,在关于NoClassDefFoundError的第一个参考链接中的以下描述:

4) Because NoClassDefFoundError is a sub class of java.lang.LinkageError it can also come if one of it dependency like native library may not available.

查看一下DoubanService类的父类为com.google.gdata.client.Service,这个类是来自于文件夹lib下的包gdata-client-1.0.jar。换句话说,我们的APK在手机中运行找不到gdata-client-1.0.jar这个jar包。

在Google中搜索关键字:Unable to resolve superclass of,得到博客园的一篇文章的链接:

http://www.cnblogs.com/vaiyanzi/archive/2012/08/09/2629950.html

按照这个文章说明,在工程下新建文件夹libs,并把第三方jar包拷贝到此文件夹,编译运行,OK了。    

Android开发中如果将ADT 升级到17以上(包括17),如果你的项目中引用了其它第三方的jar包,在运行是就会报下面的错误。这是因为在ADT17以后第三方包统一要放在一个libs的文件夹中,如果你的第三方包(jar)没有放在这里,编译时不会将其拷贝到.dex文件中。

此时看一下工程中的bin文件夹内容,如下图:

未新建libs文件夹前,bin文件夹内容,如下图:

如果在Console窗口中看到如下输出:

[2013-04-11 23:26:32 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/google/gdata/client/douban/DoubanQuery;

[2013-04-11 23:26:32 - douban_android] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/google/gdata/client/douban/DoubanQuery;

请在libs中把lib.jar文件删除。

此项目源码调试待续……