在使用百度定位SDK时发生这种问题:java.lang.NoClassDefFoundError: com.baidu.location.LocationClient
问题出错过程:
工程原来是在R12版本下开发的,后来为了追风,我就换掉R12,改成使用R21.1了。然后从svn上检出R12版本下开发的代码(这个代码在R12下运行是完全没有错误的)。问题就来了,一旦运行代码,就报java.lang.NoClassDefFoundError。
第一次报的是我继承的BDLocationListener的Listener找不到,private class 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刷新加载编译完毕应该就没错了。但是我的还是报错,于是就clean下工程,然后红色×就不见了。既然不见了,说明就没问题了呗。于是重新运行工程,错误果断没有了,成功进入主界面。
总结类似找不到第三方jar中class的解决办法:
1、如果你是R16版本,并且你的jar还是lib文件下,那么你先将lib rename为libs,然后clear工程试试还有没有问题
2、如果还不成功,你可以试探着将第三方的混淆给去掉,有些时候,就是因为混淆了第三方的代码,导致找不到第三方的类。在proguard.cfg文件中添加配置 例如:-keep class com.baidu.**{*;}
3、如果你是从低版本转移到高版本,出现某些不可思议的问题,比如在低版本正常运行的代码,在高版本中出错了,你稍微从高低版本的不同处找一下原因。比如我:删除bin然后让他自动生成下。然后的然后就没问题了。
4、如果你跟我上次遇到的问题一样,类找到了,但是发现类中的某个方法找不到,那么,你就考虑下是不是冲突问题,改一下你类的包名。(这中问题一般出现在开源代码生成的jar中,不常见)。
转自:http://my.oschina.net/zhibuji/blog/119583
相关推荐
这个错误通常意味着在运行时找不到某个类的定义,即使编译时该类是可用的。在本例中,问题出在一个特定的情景:在Android 4.4版本的设备上,当Activity的生命周期回调方法`onCreate()`和`onSaveInstanceState()`同时...
1. **降级JDK版本**:你可以将JDK版本回退到Java 8或更低,这样JAXB API就会作为Java SE的一部分默认包含在内。但这种方法可能会限制你的项目对新特性和性能优化的利用。 2. **手动添加依赖**:在Java 9及以上版本...
我解决这个问题的办法,就是去注释掉,classpath引入的,以及app下的build.gradle引入的插件,因为它是秒出的,没有到下载依赖包部分,所以可以排除文件冲突之类的。 经过我注释,发现是walle渠道打包引入的 apply ...
在描述中提到的问题 "java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory" 是一个常见的运行时错误,表明在运行时找不到指定的类。这种错误通常发生在类已经被编译,但在运行时无法找到对应的...
Android Studio 升级到 3.0 提示 java.lang.NoClassDefFoundError 的解决方法 Android Studio 升级到 3.0 后,很多开发者都会遇到 java.lang.NoClassDefFoundError 错误,这个错误的出现主要是由于 Gradle 配置的...
java.lang.NoClassDefFoundError是在Java类加载机制中出现的一种运行时错误,通常发生在类或接口在编译时存在,但在运行时却找不到。这种情况可能由以下几种原因导致: 1. 编译时依赖与运行时依赖不一致:这种情况...
在Android平台上,每个应用程序都需要一个数字签名来验证其来源和完整性,确保应用在安装和运行时的安全性。 首先,我们来看一下如何使用这个signapk.jar工具: 1. **解压**:下载得到的压缩包后,你需要将其解...
Exception in thread "main" java.lang.NoClassDefFoundError: pxb/android/dex2jar/v3/Main Caused by: java.lang.ClassNotFoundException: pxb.android.dex2jar.v3.Main at java.net.URLClassLoader$1.run...
实在抱歉,资源分不能设置为0,浪费你1个积分。...若采用上面的方法引用则在运行时会找不到okhttp3 库中的类。 针对这种问题可以采用maven仓库来解决,我们可以将aar生成到本地或远程maven仓库,再引用仓库中的aar.
当你发起一个请求时,可以提供一个实现了`RequestCallback`接口的匿名类,这个接口定义了`onSuccess()`和`onFailure()`方法,分别在请求成功和失败时被调用,可以在这里处理返回的数据或者异常。 3. 请求参数与...
这个错误通常发生在运行时,表明在编译时Okio库被正确引用,但在运行环境中找不到对应的类。解决这个问题的方法有: 1. **确保库已添加**:检查项目的构建配置,确保已经正确添加了okhttp-2.4.0和okio-1.4.0的依赖...
- `NoClassDefFoundError`: 如果找不到所请求的类或接口的定义。 - `OutOfMemoryError`: 如果系统内存不足。 #### 3. GetSuperclass `GetSuperclass`函数用于获取一个类的超类。 **函数原型:** ```c++ jclass ...
该错误发生在程序的main线程中,表明Java.lang包中找不到LoggerFactory类。通常这是由于缺少了必要的jar包导入。在这个例子中,开发者忘记导入了与mina相关的slf4j-api-1.6.4.jar和slf4j-nop-1.6.4.jar两个包。解决...
当在项目构建或者运行时出现问题,比如java.lang.NoClassDefFoundError,这通常意味着在运行时类路径上没有找到对应的依赖类。这时候需要确保在构建过程中已经正确地引入了所有必需的依赖项。 为了解决依赖库在运行...
- **常见问题解决**: 针对`java.lang.NoClassDefFoundError`等常见错误提供解决方案。 #### 十一、测试米聊实例 - **案例分析**: 通过测试“米聊”这样的即时通讯应用,演示如何使用Robotium进行复杂的多活动测试。...