1.问题出现
引入了一个jar包,jar包中有okhttp3,但是我引入的其他依赖中也有okhttp3,所以就出现了Duplicate class okhttp3...的错误
密密麻麻看着都头疼,其实这个问题就是重复引用,在谷歌换了各种关键词,找出出现最为频繁的几个方案列出来:
方案1:compileOnly files('libs/***.jar')
结果:仅能保证编译通过,但compileonly等修饰的库不会一块打包进APK
方案2:增加packagingOptions(点击这里查看)
android {
...
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
exclude("META-INF/*.kotlin_module")
}
//或者
packagingOptions {
resources.excludes.add("META-INF/*")
}
}
结果:无效
方案3:添加configurations(点击这里查看)
dependencies {
implementation(name: 'xxx', ext: 'jar') {
exclude module: 'okhttp3'
}
}
结果:无效
方案4:在android标签下添加configurations(点击这里查看)
android {
...
configurations {
all*.exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}
}
结果:成功
总结:
谷歌换了很多关键词搜索,搜索出来的答案反反复复就那么几个,也许其他方案对别人有效,也许是我的配置信息有问题,但是最无奈的还是抄答案这种行为,有些解决方案的文档写的非常模糊,甚至格式都写得很凌乱,也没有贴出原答案的出处,这让原本不富裕的时间雪上加霜。