Java/Android中如何排除本地AAR包的传递依赖?
本地AAR包类重复冲突解决方案
错误原因
之前的写法报错是因为直接以AAR文件名作为依赖时,Gradle不支持直接附加闭包配置exclude规则,只有group:name:version格式的坐标依赖才支持该写法。
方案1:标准本地AAR依赖排除规则(优先尝试)
首先确认Module级build.gradle中已经配置了libs目录为本地依赖仓库:
repositories { flatDir { dirs 'libs' } }
再修改依赖声明格式,附加排除规则:
dependencies { implementation (name:'3ds-sdk-2.3.4.0-production-release', ext:'aar') { exclude group:'com.squareup.okhttp3', module:'okhttp' exclude group:'com.squareup.okio', module:'okio' } // 保留其余原有依赖 }
方案2:全局强制统一依赖版本
如果方案1不生效,可通过全局分辨率策略强制统一okhttp、okio的版本,对所有来源的依赖都生效:
// 写在Module级build.gradle的android节点外层 configurations.all { resolutionStrategy { // 版本号替换为你项目当前使用的版本即可 force 'com.squareup.okhttp3:okhttp:3.12.1' force 'com.squareup.okio:okio:1.15.0' } }
方案3:打包时优先指定重复类来源(兜底方案)
如果冲突的类是AAR直接打包进内部的(非传递依赖,无法通过exclude排除),可通过packagingOptions指定重复类的选择策略:
android { // 保留其余原有配置 packagingOptions { // 优先选用项目依赖的okhttp、okio包中的类 pickFirst 'okhttp3/**' pickFirst 'okio/**' } }
内容的提问来源于stack exchange,提问作者Raphael Pinel
相关产品推荐
相关产品推荐

