这段时间有一个新需求,安卓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.
+--- com.android.support:appcompat-v7:25.4. (*)
\--- com.commit451:PhotoView:1.2.
\--- com.android.support:support-v4:23.0. -> 25.4. (*) \--- com.github.chrisbanes.photoview:library:1.2.
\--- com.android.support:support-v4:22.0. -> 25.4. (*)

会发现,新引入的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:依赖-管理依赖的版本

 

最新文章

  1. Time-travel Models
  2. dede文章内容页增加视频文件
  3. LINQ之路10:LINQ to SQL 和 Entity Framework(下)
  4. 使用 xsd.exe 命令工具将 xsd 架构生成 类(CS) 文件
  5. spring边边角角
  6. VS2010快捷键大全
  7. c++11 gcc4.8.x安装
  8. Python命名规范
  9. 暑假集训(4)第四弹 -----排列,计数(hdu1465)
  10. gvim 常用命令
  11. 微信企业号开发遇到的bug
  12. mysql主从同步错误解决和Slave_IO_Running: NO
  13. iOS 9界面适配利器:详解Xcode 7的新特性UIStackView
  14. BZOJ.4184.shallot(线段树分治 线性基)
  15. [Swift]LeetCode896. 单调数列 | Monotonic Array
  16. LeetCode算法题-Add Digits(Java实现-3种解法)
  17. Houdini技术体系 基础管线(二) :Heightfiled与UE4的无缝导入以及对World Composition的支持
  18. 066 linux下时间的修改
  19. [转][JSBSim]JSBSim的使用--飞行控制组件及其配置
  20. jq页面加载分割截图

热门文章

  1. Go语言实例化结构体——为结构体分配内存并初始化
  2. java知识随笔整理-Oracle存储过程优缺点
  3. springboot 论坛项目
  4. 二叉树(Java实现)
  5. SpringBoot起飞系列-配置嵌入式Servlet容器(八)
  6. 老贾的幸福生活day03 之思维导图
  7. 22-Perl Socket 编程
  8. SQL:MYSQL入门
  9. Python自制小时钟,并转换为exe可执行程序详解
  10. MySql学习笔记【二、库相关操作】