Android--app啟用MutiDex(是Google的一個補丁)
主要解決“65535”方法數(shù)超標(biāo)以及"INSTALL_FAILED_DEXOPT"問題隧膏。
在構(gòu)建apk的時候限制了一個dex文件能包含的方法數(shù)其總數(shù)不能超過65535(64K,1K=2^10=1024嚷那,64*1024=65535)
一般一個APP只有一個classes.dex文件胞枕,所以方法數(shù)最多是65535,而使用了MutiDex后會實現(xiàn)一個apk多個dex文件魏宽,解壓apk會發(fā)現(xiàn)有classes.dex腐泻、classes2.dex、classes(n).dex队询,這樣就突破了65535方法數(shù)量限制
使用方法
1.首先在App的build.gradle中添加multiDexEnabled true和相應(yīng)依賴
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>
但是我們經(jīng)常會使用自定義的application文件派桩,所以這種方式使用的場景不多。當(dāng)然我們可以自定義application繼承于MultiDexApplication也可以實現(xiàn)蚌斩。這樣就引申出了第二種方式铆惑。
方式二:有兩種實現(xiàn)方式,原理一樣凳寺。
實現(xiàn)一:我們自定義application直接繼承MultiDexApplication鸭津,在清單文件使用自定義application
實現(xiàn)二:我們看一下MultiDexApplication這個類具體實現(xiàn)了什么
public class MultiDexApplication extends Application {
public MultiDexApplication() {
}
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
所以我們可以照著在自定義application中實現(xiàn)attachBaseContext()方法并加上MultiDex.install(this);
注意:目前 Android 5.0 以上的設(shè)備已經(jīng)自身支持了 MultiDex 功能,也就是說在安裝 apk 的時候肠缨,系統(tǒng)已經(jīng)會幫我們把 apk 里面的所有 dex 文件都做好 Optimize 處理逆趋,所以不需要我們在代碼里啟用 MultiDex 了。但是對于 Android 5.0 以下的設(shè)置晒奕,則依然要求我們啟用 MultiDex闻书。
ok了,但是看了好多文章脑慧,說MultiDex有很多坑魄眉。。闷袒。坑律。。