java.lang.NoClassDefFoundError:retrofit2.Retrofit$Builder

2017-08-24 · 🙈Lei · 0条 · 835次

今天在编译执行Android项目的时候,报了这个错误:java.lang.NoClassDefFoundError:retrofit2.Retrofit$Builder。测试使用的手机是魅族MX3,系统Android4.4。在Vivo手机中是没有问题的,系统是Android5+。

原因:

项目比较大,还引用了一些第三方的包,所以导致Dex文件方法数超过限制,无法编译,于是我在Module的build.gradle中设置了multiDexEnabled true,这样就不会提示方法数超限。但是4.0+的Android系统依然无法编译运行,报上面的错误。

解决方法:

1. 在Module的build.gradle中设置了multiDexEnabled true

2. 在Module的build.gradle中添加

compile 'com.android.support:multidex:1.0.1'

3. 修改自己应用的入口Application,让其继承MultiDexApplication,并重写attachBaseContext方法。

public class CustomApplication extends MultiDexApplication {
    ......


    @Override

protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }

如果你的应用没有自定义Application方法,请在AndroidManifest.xml清单文件中做如下声明:

<application
    ......
android:name="android.support.multidex.MultiDexApplication"> ...... </application>


然后问题就解决了。



由于DEX文件格式限制,一个DEX文件中method个数采用使用原生类型short来索引文件中的方法,也就是最多表达65536个method,field/class的个数也均有此限制。对于DEX文件,则是将工程所需全部class文件合并且压缩到一个DEX文件期间,也就是Android打包的DEX过程中, 单个DEX文件可被引用的方法总数被限制为65536(自己开发以及所引用的Android Framework和第三方类库的代码)


  0