- 在Android中一个Dex文件最多存储65536个方法,当方法数量突破65536时,打包时就会抛出异常。
- 为解决该问题,Android5.0时Google推出了官方解决方案:MultiDex。打包时,把一个应用分成多个dex,例:classes.dex、classes2.dex、classes3.dex…,加载的时候把这些dex都追加到DexPathList对应的数组中,这样就解决了方法数的限制。
- Andorid 5.0之后,ART虚拟机天然支持MultiDex。
- Andorid 5.0之前,系统只加载一个主dex,其它的dex采用MultiDex手段来加载。
一.minSdkVersion 为 21 或更高值
设置为multiDexEnabled true
android {
defaultConfig {
multiDexEnabled true
}
二.minSdkVersion 为 20 或更低值
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
在Application中添加MultiDex.install(this);
// 继承 MultiDexApplication
public class MyApplication extends MultiDexApplication { ... }
// 或者 在Application中添加 MultiDex.install(this);
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
注意:
- SDK版本,如果已经支持了multidex,而又把android-support-multidex.jar放在了项目的libs文件下,就会报错。
- Android的Gradle插件在Android Build Tool 21.1开始支持使用multidex。
扩展:
Android的类加载机制
参考:
https://blog.csdn.net/xiaxl/article/details/83089944
https://www.cnblogs.com/tonny-li/p/7839306.html
https://www.cnblogs.com/chenxibobo/p/6076459.html
网友评论