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。这样就不会出现重复引用了。

猜你喜欢

转载自blog.csdn.net/xiexie_lovely/article/details/84477659