如何解决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的错误的主要内容,如果未能解决你的问题,请参考以下文章

转如何手动添加Android Dependencies包

android ADT 无法查看第三方jar源代码

Android引入多个jar包,冲突问题解决方案

Android 解决 jar/aar 包类名冲突

ubuntu下ADT安装成功但不能使用

android project中第三方jar包无法解析