Program type already present: javax.annotation.*的解决

问题

最近在引用stetho这个第三方库时,编译时一直报错。错误如下

* What went wrong:
Execution failed for task ':Kuaikan:transformClassesWithMultidexlistForDebug'.
> com.android.build.api.transform.TransformException: Error while generating the main dex list.

更详细的错误是

Program type already present: javax.annotation.*

也就是说,出现了两个同时引用javax.annotation的情况。

解决

这种时候可以按照我们下面的

查询依赖库

我们可以通过gradle命令来查询当前的库的引用情况

./gradlew kuaikan:dependencies

通过这个命令,可以查看当前库的引用。

+--- com.facebook.stetho:stetho:1.5.0
|    +--- commons-cli:commons-cli:1.2
|    \--- com.google.code.findbugs:jsr305:2.0.1
+--- com.github.ctiao:dfm:0.4.4

发现了stetho内部依赖了com.google.code.findbugs。其实它内部包含了模块annotations,所以会导致javax.annotation重复引用的情况。

解决方案

既然有两个同样的库,那么只要保证其中的一个库不引入annotation就可以了。

implementation('com.facebook.stetho:stetho:1.5.0') {
        exclude group: 'com.google.code.findbugs'
        exclude module: 'annotations'
    }

表示意思是: 在引入了stetho库的同时,不引入其内部的依赖com.google.code.findbugs中的模块annotations。这样就不会出现重复引用了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,696评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,280评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,007评论 6 342
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,587评论 0 6
  • 属于自己的问题 没必要掩饰 掩饰造成的后果 是大量的矛盾堆积如山 是更多的问题层出不穷 属于自己的缺点 没必要隐瞒...
    渔夫镕谷阅读 498评论 1 14