Android 运行时找不到类:java.lang.NoClassDefFoundError:...


在使用百度定位SDK时发生这种问题:java.lang.NoClassDefFoundError: com.baidu.location.LocationClient

问题出错过程:

工程原来是在R12版本下开发的,后来为了追风,我就换掉R12,改成使用R21.1了。然后从svn上检出R12版本下开发的代码(这个代码在R12下运行是完全没有错误的)。问题就来了,一旦运行代码,就报java.lang.NoClassDefFoundError。


第一次报的是我继承的BDLocationListener的Listener找不到,privateclass MyBDListener implements BDLocationListener 。我认为是在打包代码的时候出现问题,于是我就不使用继承直接在LocationClient.registerLocationListener(new BDLocationListener(){}),直接做了个内部类。这样果然不在包找不到Listener的错误了。但是接着就又报错:java.lang.NoClassDefFoundError: com.baidu.location.LocationClient。稍微分析一下,就觉得这不是我自己代码问题了,是第三方jar包问题啊,首先想到的是:是不是混淆的时候将其混淆了,然后就找不到这个类了?于是在proguard.cfg中添加配置如下:-keep class com.baidu.**{*;}这样就不混淆了吧。于是再次运行,还是报同样的错误。排除混淆错误后,就真没遇到过这样的问题了,然后百度了下,有人也遇到这个问题了,他使用的R16,将lib改成libs就没问题了,但是我的工程中,jar明明就是在libs文件下!而且代码在之前的版本都能正常运行,在高版本下就不行了,肯定不是代码问题,必须是环境问题啊。经验这样告诉我。既然觉得是环境问题就肯定是高低版本区别之处出问题了,于是想当然的想到了bin目录,打开之后果然发现有几个隐藏颇深的红色×。想都没想,果断删之。如果你是在eclipse中删除的话,他只是删除了里面的几个文件,根本没有删除干净,红×照样在眼前。为了彻底删除,关闭eclipse,然后通过资源管理器找到该bin然后删除,重新打开eclipse,一般等eclipse刷新加载编译完毕应该就没错了。但是我的还是报错,于是就clear下工程,然后红色×就不见了。既然不见了,说明就没问题了呗。于是重新运行工程,错误果断没有了,成功进入主界面。


总结类似找不到第三方jar中class的解决办法:

1、如果你是R16版本,并且你的jar还是lib文件下,那么你先将lib rename为libs,然后clear工程试试还有没有问题
2、如果还不成功,你可以试探着将第三方的混淆给去掉,有些时候,就是因为混淆了第三方的代码,导致找不到第三方的类。在proguard.cfg文件中添加配置例如:-keep class com.baidu.**{*;}
3、如果你是从低版本转移到高版本,出现某些不可思议的问题,比如在低版本正常运行的代码,在高版本中出错了,你稍微从高低版本的不同处找一下原因。比如我:删除bin然后让他自动生成下。然后的然后就没问题了。
4、如果你跟我上次遇到的问题一样,类找到了,但是发现类中的某个方法找不到,那么,你就考虑下是不是冲突问题,改一下你类的包名。(这中问题一般出现在开源代码生成的jar中,不常见)。

最后希望对遇到类似问题的人有所帮助。
——生命不息,编码不止


更多相关文章

  1. Android(安卓)Studio adb无法启动解决方案
  2. 迁移到AndroidX的现实
  3. android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
  4. Android中 Webview中js与Activity的交互
  5. Unable to start activity ComponentInfo
  6. Android(安卓)五大布局
  7. 【Android】(已更新解决方案)更新SDK版本(25)后,自定义FloatingAction
  8. ArcGis for Android(安卓)10.2.8个人整理
  9. Android程序反编译

随机推荐

  1. android开发的3种方式
  2. android事件拦截处理机制详解
  3. Android(安卓)数据存储五种方式使用与总
  4. Android(安卓)采用HttpClient提交数据到
  5. Android利用已有控件实现自定义控件
  6. Android开发规范最新详尽版下载
  7. Android(安卓)Intent详解
  8. Unity自动打包工具——Mac上打包android
  9. android修炼进阶之法
  10. 初学Android,数据存储之使用SQLite数据库