Android--app启用MutiDex(是Google的一个补丁)
主要解决“65535”方法数超标以及"INSTALL_FAILED_DEXOPT"问题。
在构建apk的时候限制了一个dex文件能包含的方法数其总数不能超过65535(64K,1K=2^10=1024,64*1024=65535)
一般一个APP只有一个classes.dex文件,所以方法数最多是65535,而使用了MutiDex后会实现一个apk多个dex文件,解压apk会发现有classes.dex、classes2.dex、classes(n).dex,这样就突破了65535方法数量限制
使用方法
1.首先在App的build.gradle中添加multiDexEnabled true和相应依赖
android {
......
defaultConfig {
......
//dex 突破65535的限制 multiDexEnabled 多dex支持
multiDexEnabled true
}
}
dependencies {
......
implementation 'com.android.support:multidex:1.0.0'
}
2.两种方式
方式一:在清单文件里添加
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
但是我们经常会使用自定义的application文件,所以这种方式使用的场景不多。当然我们可以自定义application继承于MultiDexApplication也可以实现。这样就引申出了第二种方式。
方式二:有两种实现方式,原理一样。
实现一:我们自定义application直接继承MultiDexApplication,在清单文件使用自定义application
实现二:我们看一下MultiDexApplication这个类具体实现了什么
public class MultiDexApplication extends Application {
public MultiDexApplication() {
}
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
所以我们可以照着在自定义application中实现attachBaseContext()方法并加上MultiDex.install(this);
注意:目前 Android 5.0 以上的设备已经自身支持了 MultiDex 功能,也就是说在安装 apk 的时候,系统已经会帮我们把 apk 里面的所有 dex 文件都做好 Optimize 处理,所以不需要我们在代码里启用 MultiDex 了。但是对于 Android 5.0 以下的设置,则依然要求我们启用 MultiDex。
ok了,但是看了好多文章,说MultiDex有很多坑。。。。。
网友评论