MultiDex使用中导致的crash(VerifyError)问题解决方案

关于问题描述

在项目中遇到一个奇葩的问题,多台测试机测试,其中有一台直接crash(点个名vivo的手机),并且报以前没有见到过的Error类型java.lang.VerifyError,下面是log截图:
这里写图片描述
在网上百度了一番之后,众说纷纭,现在马上都已经是2017年了,所以排除了一些关于eclipse的解决方案,我用的是AS,其中有两篇文章还是很有用的:
http://blog.csdn.net/zhuobattle/article/details/47153025
以及
http://blog.csdn.net/zhuobattle/article/details/52958364
好了,相面直接说说我的分析和解决方法了。

分析及解决方案

简单分析
首先看到log之后,log中报错的地方似乎和常见的错误不太一样,其中重要的信息有Could not find class,这是一个非常有效的信息,意思都明白,没有找打相关的类,why?我的这个项目可是一个已经上线的项目移植过来的,好吧,想了想,估计是项目第三方sdk比较多,导致程序又庞大了不少,原来程序就因为API数超过了64K,而分成了两个dex, 用的是MultiDex,最终导致crash!!!

解决方案
用MultiDex来突破64K的method id数量的限制,具体实现步骤如下:

1. 在Module的build.gradle里添加multiDexEnabled true
例如:

defaultConfig {
        applicationId "com.baidu.my"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        // dex突破65535的限制
        multiDexEnabled true
    }

2. 接着在Module的build.gradle里添加

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

3. 第三步有两种情况
1)如果你的apk没有定义application,则在AndroidManifest.xml里的application里做如下修改:
添加MultiDexApplication(因为是具体项目,这个方式并没有测试)

<application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:name="android.support.multidex.MultiDexApplication"
        tools:replace="android:icon, android:name"
       >

2)第二种也就是大家最常用到的方式了,在自定义的application中复写方法,具体如下

@Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

结束

好了,至此,重新再在vivo上跑一遍,终于不crash了,如果你也遇到和我一样的问题,希望你也顺利解决哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值