先简单了解下.apk和.dex
- .apk Android安装包
- AndroidManifest.xml配置文件
- META-INF 签名信息
- classes.dex Java字节码文件
- res 资源文件
- resources.arsc 二进制配置文件
- .dex Android Dalvik虚拟机执行文件
什么是MultiDex?
- Android中一个Dex文件最多存储65536个方法,也就是一个short类型范围。但随着应用方法数量的不断增加,当Dex文件突破65536方法数量时,打包时就会抛出异常
- 为解决该问题,Android5.0时Google推出了官方解决方案:MultiDex
- 打包时将一个应用分成多个dex,例:classes.dex、classes2.dex...,加载时把这些dex都追加到DexPathList对应的数组中,这样就解决了方法数的限制
- Andorid 5.0之后,ART虚拟机天然支持MultiDex
- Andorid 5.0之前,系统只加载一个主dex,其它的dex采用MultiDex手段来加载
如何使用?
- build.gradle配置
android {
defaultConfig {
...
// Enabling multidex support.
// 如果是android 5.0以上的设备,只需要设置为multiDexEnabled true
// minSdkVersion 为 20 或更低值,还需执行下面的2、3步
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
- Manifest声明修改,如果有自己的Application,继承MulitDexApplication
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
- 重写 Application的attachBaseContext()这个方法
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
ok了
参考链接
网友评论