美文网首页Android开发技巧
遇到异常Multiple dex files define时

遇到异常Multiple dex files define时

作者: sugaryaruan | 来源:发表于2018-04-10 01:17 被阅读2831次

    这段时间有一个新需求,安卓App通过URL在线预览PDF。选择使用并倒入PdfViewPager库时,报了如下异常:

    jdmerchants:transformDexArchiveWithExternalLibsDexMergerForTestServerDebug
    
    com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
    
    Multiple dex files define Luk/co/senab/photoview/log/Logger
    
    

    出现Multiple, dex字样,直接想到的可能就是重复倒入依赖了,那么问题来了:

    为什么我导入PdfViewPager类库的时候会产生重复依赖问题?
    PdfViewPager类库里和我现有的依赖类库什么文件重复?
    如何确定是哪某个类库里的文件和PdfViewPager类库产生重复的依赖了?

    定位问题缘由

    我用的是Mac下的Android Studio 3.1开发

    首先需要找到一个工具或者方法,能了解到当前项目中所有类库内部的依赖情况。这里提供一种方法,输入下面命令

    ./gradlew -q 模块名:dependencies
    

    在命令行窗口就能列出当前模块的所有依赖情况。我选取了和这次问题有关内容的,展示如下:

    \--- es.voghdev.pdfviewpager:library:1.0.3
     +--- com.android.support:appcompat-v7:25.4.0 (*)
     \--- com.commit451:PhotoView:1.2.4
          \--- com.android.support:support-v4:23.0.1 -> 25.4.0 (*)
    
    
    \--- com.github.chrisbanes.photoview:library:1.2.4
     \--- com.android.support:support-v4:22.0.0 -> 25.4.0 (*)
    

    会发现,新引入的pdfviewpager类库用到了com.commit451:PhotoView:1.2.4;这和com.github.chrisbanes.photoview:library:1.2.4类库重复了

    解决问题

    问题我们找到了:pdfviewpager类库依赖了chrisbanes.photoview类库,造成chrisbanes.photoview类库重复使用,因此只要在引入pdfviewpager的时候,排除掉com.commit451:PhotoView:1.2.4就可以了

    那么如何排除呢?Gradle构建项目肯定想到了这种情况下的处理--引入第三方类库时排除掉里面的某个依赖库:

    compile ('es.voghdev.pdfviewpager:library:1.0.3'){
        exclude group: 'com.commit451', module:'PhotoView'
    }
    

    小结

    遇到了之前未曾遇到的问题,这个问题所需的知识点又是之前未曾储备的盲区,这时候google搜索找到相似的问题的答案要能作类比和知识延伸,慢慢思考,有效思考,得出一点新的结论,然后继续思考,就能越来越接近解决问题的成功路径了

    参考资料

    Gradle依赖排除

    有关 Android Studio 重复引入包的问题和解决方案

    跟我学Gradle-5.3:依赖-管理依赖的版本

    相关文章

      网友评论

        本文标题:遇到异常Multiple dex files define时

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