Android MultiDex

在项目中遇到:华为手机HUAWEI-PE-TL104.4.2 API19手机安装后启动不了,即使启动在试用工程中无故异常停止运行。
发现在问题:apk时多进程,在Application的attachBaseContex中为了优化运行速度,对主进程执行了如下代码:

MultiDex.install(base)

解决:不做进程限制都执行这句代码,解决问题。
在我们项目中用的bugly文档中也说过:

MultiDex注意事项
如果使用了MultiDex,建议通过Gradle的“multiDexKeepFile”配置等方式把Bugly的类放到主Dex,另外建议在Application类的"attachBaseContext"方法中主动加载非主dex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
}

Android API21之前Dalvik,DexOpt把类的方法id检索成链表长度是short类型,id数超过65536个。使用multidex兼容。
在Android API21(包括)之后ART运行时,安装时执行预编译,扫描classesN.dex文件,编译成单个.oat文件。则不需要Dalvik可执行文件分宝支持库。

所以在Android API21之前才会有65536问题。解决这个问题需要引入库

compile 'com.android.support:multidex:1.0.1'

在app的build中添加

defaultConfig {
       、、、
        multiDexEnabled true
    }

在application中添加

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        if (!isAppMainProcess(this, false)) {
            //do something for init
            return;
        }
        LogUtils.d(TAG, "attachBaseContext-初始化");
        MultiDex.install(base);
    }

你可能感兴趣的:(Android MultiDex)