1. 前言

最近做项目开发的时候,遇到一个问题,NoClassDef,NoMethod之类的错误,但是把log往前看,会发现一些Dalvik的一些报错,看到这些log之后,就会觉得后面的什么方法找不到,类没有定义什么的错误真是的应该出现,那么这些Dalvik的错误怎么解释呢? 因为类似的报错只出现在了一个同事的手机上,而且是KK版本,比较老。介绍下我的分析思路:

  1. 确定问题发生位置,注释掉(并解决因注释引起的编译错误)---> Defeat
  2. 因为是KK版本,调整minSDK到19 ---> Defeat
  3. 删除或者更新引起问题的jar包 ---> Defeat
  4. 考虑到MultiDex在Android5.0 以后默认支持,为兼容旧版本,手动兼容一下 ------------------------>Victory

2. 配置MultiDex

Android5.0及以上版本默认支持MultiDex

2.1 修改build.gradle

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling MultiDex support.
        multiDexEnabled true
        }
        ...
    }
    dependencies { compile 'com.android.support:multidex:1.0.1'
}

2.2 修改application

三种方法

2.2.1 在AndroidManifest.xml的application中声明android.support.MultiDex.MultiDexApplication

2.2.2 让自己的application类继承MultiDexApplication

2.2.3 重写attachBaseContext()方法

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

3. 推荐文章

更多关于MultiDex可以查阅 美团技术沙龙关于分包的博客 或者直接查看MultiDex源码

results matching ""

    No results matching ""