当你的应用及其引用的库超过 65,536 种方法时,你会遇到一个编译错误,指明你的应用已达到 Android 编译架构规定的引用限制:
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
较低版本的编译系统会报告一个不同的错误,但指示的是同一问题:
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
针对此问题,解决方案如下:
- Android 5.0及以上
只需在模块级 build.gradle 文件中将 multiDexEnabled 设为 true,如下所示:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 28
//开启多 dex 文件配置
multiDexEnabled true
}
...
}
- Android 5.0以下
- 修改模块级 build.gradle 文件以启用多 dex 文件,并将多 dex 文件库添加为依赖项,如下所示
android {
defaultConfig {
...
minSdkVersion 17
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
//dex依赖库
compile 'com.android.support:multidex:1.0.3'
}
- 修改清单文件以设置
标记中的 android:name,如下所示:
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
如果你自定义了Application类,则可以继承MultiDexApplication;
如果你自定义了Application类,单无法更改基类,那你可以替换 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用多 dex 文件:
public class MyApplication extends XXXApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}