美文网首页
Android java.lang.NoClassDefFoun

Android java.lang.NoClassDefFoun

作者: 枫叶丶鑫鑫 | 来源:发表于2017-03-17 13:05 被阅读285次

    1、问题描述

    在**Android 5.0 **以下的部分机型中会出现没有找到相关类的错误。即:java.lang.NoClassDefFoundError

    错误日志.png

    2、问题原因:

    随着项目业务越来越多,工程代码越来越大,方法也越来越多。
    由于,dexopt 是一个程序,在应用安装的时候,系统会通过 dexopt 来优化 dex 文件,在优化过程中 dexopt 采用一个固定大小的缓冲区来存储应用中所有的方法信息,这个缓冲区就是 LinearAllocLinearAlloc 缓冲区在新版本的android中是 8 MB,或者 16 MB,但是在android2.2android2.3上面只有5mb,当您的apk中的方法数比较多时,尽管它还没有达到 65535 的方法数限制,但是他的存储空间可能已经超过了 5 MB ,这种情况下 dexopt 程序就会报错,从而导致安装失败。
    但是在部分 Android4.X 的手机中,可能安装过程是正常的,但是在运行应用过程中,虚拟机解析 dex 文件时,由于单个 dex 中方法数,造成解析过程中丢失部分类。从而出现上面问题中描述的现象。

    3、解决方案:

    step1:配置build.gradle (app)
    注意:

    android studiogradle 编译环境中,如果使用multidex,首先要使用 android sdk build tools 21.1 及以上版本。

    android {
    
            compileSdkVersion 22
    
            buildToolsVersion "23.3.0"
    
    defaultConfig {
    
              minSdkVersion 15
    
              targetSdkVersion 22
    
              // Enabling multidex support. 开关
    
               multiDexEnabled true
    
    }
    
    dependencies {
    
           // 添加依赖
    
              compile 'com.android.support:multidex:1.1.0'
    
    }
    

    step2:

    使用自定义的 Application 继承 MultiDexApplication 这个类,或者重写 Application 的方法 attachBaseContext() ,并调用 MultiDex.install(this);

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

    step3:

    加入该操作之后出现 build 内存溢出处理,在 android{} 模块中加入 dexoptions

    android {
      ...
      dexOptions{ javaMaxHeapSize "4g"}
      ...
    }
    
    

    4、Multidex造成的影响:

    • 1、应用启动速度会降低,由于用用启动时会加载额外的 dex 文件,将会造成启动速度降低,而且有可能会造成 ANR ,所以尽可能的第二个 dex 不要太大。
    • 2、由于 dalvik LinearAlloc 的 bug ,这可能会导致multidex的应用无法在 android4.0 之前的手机上运行。

    参考
    http://www.jianshu.com/p/d2d6e87e5a42
    http://www.jianshu.com/p/8b4f711da0bb

    相关文章

      网友评论

          本文标题:Android java.lang.NoClassDefFoun

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