Android--"65535"方法数超标

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文件,所以这种方式使用的场景不多。当然我们可以自定义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有很多坑。。。。。


你可能感兴趣的:(Android--"65535"方法数超标)