美文网首页
Android MultiDex

Android MultiDex

作者: 主音King | 来源:发表于2018-11-30 11:25 被阅读14次

    在项目中遇到:华为手机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

          本文链接:https://www.haomeiwen.com/subject/ozuccqtx.html