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