如何解决ADT17下Android第三方jar包NoClassDefFoundError的错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决ADT17下Android第三方jar包NoClassDefFoundError的错误相关的知识,希望对你有一定的参考价值。
参考技术A关于这个问题,下面我截的这几个图能更容易地说清楚:
从左到右三个图分别是:
1.我的ADT16版的工程(三个截图的细节图标有些不一样,因为第一个是Windows的Eclipse下截的图,而另两个是在Mac的Eclipse下截的)
2.我修复前的ADT17版工程
3.我修复后的ADT17版工程
从中我们可以看到:
1.蓝色方框中的内容变化,是由新版补丁引起的(后面详细说明)
2.红色方框的内容变化,是我做的修复工作的结果
我所做的修复工作如下:
1.从标准的Java编译路径中移除第三方JAR包
在工程名称上点右键 > Properties > Java Build Path > Libraries标签 >移除android
SDK之外的所有第三方JAR包
2把JAR包所在的文件夹名称从“lib”修改为“libs”
这样做之后,ADT能自动找到所有在libs文件夹下的JAR包,把他们加到工程的依赖路径中,并直接显示在Android
Dependecies分类下。
3.清理整个工程(可能需要也可能不用)
4.完成修复,可以正常运行了
导致此问题的原因,是新版的ADT管理JAR包的方式发生成变化,旧版支持两种不同的JAR包引用(一是Android工程的库,另一个是标准的库),新版则把这两者合并到Android
Dependencies下了。
Android引入多个jar包,冲突问题解决方案
参考技术A Android引入多个jar包,冲突问题解决方案(引入jar包,即本地文件) 以引用加载第三方框架中也有okhttp3 okio冲突讲解(PS:如果不知道是那个jar冲突可以用指令gradlew app:dependencies查看)
1.找到项目中的libs->对应冲突的第三方包.jar。
3.用解压工具打开(不是解压,是打开。比如windows下可用360解压打开)。
4.删掉重复引用的包(okhttp3 + okio)。
5.重新打开项目,等待编译。
6.可能出现innerClass mission警告,可以忽略掉,或者clean build。
7.如果还报错的话那么在app build.gradle加入:
packagingOptions
exclude 'META-INF/proguard/okhttp3.pro'
温馨提示:
如果你的项目是因为刚刚添加了某个网络加载依赖导致的,那么你就查看下这个库下的哪一个依赖冲突了,在添加这个依赖的时候把它给过滤掉。具体写法如下。
implementation ('com.***.***:XXX:1.2.0') // 所加的第三方框架
exclude module: 'okhttp:3.10.0'
//或者要把组名一起添上去
implementation ('com.***.***:XXX:1.2.0') // 所加的第三方框架
exclude group: 'com.squareup.okhttp3'
以上是关于如何解决ADT17下Android第三方jar包NoClassDefFoundError的错误的主要内容,如果未能解决你的问题,请参考以下文章