美文网首页
Android5.0以下报NoClassDefFoundErro

Android5.0以下报NoClassDefFoundErro

作者: 五月笑忘 | 来源:发表于2017-03-22 21:13 被阅读77次

    Android5.0以下报NoClassDefFoundError

    一开始,我的项目都是在API21(5.0)的情况下编写的,所以过程很顺利,没有任何的错误,但是偶然之下,我用了同事的4.4的测试机,发现只要用到网络请求的地方,就会报NoClassDefFoundError,毫无办法。因为项目里用到了okhttp跟retrofit,我一度以为是引入的包冲突了,在那查了半天,无果。后来发现是Multidex这个操作的时候有问题,网上一查,真的有这个问题,现在阐述一下具体解决过程。

    论坛方法:

    apply plugin: 'com.android.application'
    android {
      ...
    }
    dependencies {
      ...
    }
    android.applicationVariants.all { variant ->
        task "fix${variant.name.capitalize()}MainDexClassList" << {
            logger.info "Fixing main dex keep file for $variant.name"
            File keepFile = new File("$buildDir/intermediates/multi-dex/$variant.buildType.name/maindexlist.txt")
            keepFile.withWriterAppend { w ->
                // Get a reader for the input file
                w.append('\n')
                new File("${projectDir}/multidex.keep").withReader { r ->
                    // And write data from the input into the output
                    w << r << '\n'
                }
                logger.info "Updated main dex keep file for ${keepFile.getAbsolutePath()}\n$keepFile.text"
            }
        }
    }
    tasks.whenTaskAdded { task ->
        android.applicationVariants.all { variant ->
            if (task.name == "create${variant.name.capitalize()}MainDexClassList") {
                task.finalizedBy "fix${variant.name.capitalize()}MainDexClassList"
            }
        }
    }
    

    clean 然后 rebuild 项目,完成之后在 module 下的 build/intermediates/multi-dex/xxx 里找到 maindexlist.txt 文件(如果找不到相关目录,可能需要你同步后 rebuild 项目才能生成),复制里面的内容到 module 根目录下 multidex.keep 文件中(没有则先创建此文件)
    具体的步骤经测试可行

    没用出现该maindexlist.txt 文件解决办法

    在上述代码执行后并没有出现maindexlist.txt 这个文件(其实我一开始也没有- -),然后我查阅了android程序员都知道的网站,发现自己确实引用了

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

    也确实设置了

    multiDexEnabled true
    

    但是没有在manifest文件中设置(不太习惯使用markdown的标签,application缺少标签,见谅)

        application
            ...
            android:name="android.support.multidex.MultiDexApplication">
            ...
        /application
    

    重新运行,不报错,问题解决

    自己新建的个人博客,至今还有很多的问题,如果谁有兴趣希望跟我联系,共同进步,共同学习,望不吝提出意见与指导,万分感谢!

    相关文章

      网友评论

          本文标题:Android5.0以下报NoClassDefFoundErro

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