起因
我们的aar使用华为的某个功能,依赖的库比较新,其中华为的base库版本为4.0.2,第三方使用华为push,且版本比较旧,华为的base库为2.6.3,在接入我们的aar时产生了冲突。
通过如下命令可以查看依赖树:
gradlew :app:dependencies
通过依赖树可以看到,两者版本不一致
解决方式
1.去除其中的一个base库
implementation 'com.huawei.android.hms:push:2.6.3.301', {
exclude group: 'com.huawei.android.hms',module:'base'
}
2.统一版本
configurations.all {
//循环一个个的依赖库
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
//获取当前循环到的依赖库
def requested = details.requested
// 查找要作处理的依赖的group名
if (requested.group == 'com.huawei.android.hms') {
// 查找要作处理的依赖的module名
if (requested.name.startsWith("base")) {
//这里指定需要统一的依赖版本
details.useVersion '4.0.3.302'
// details.useVersion '2.6.1.301'
}
}
}
}
后续处理
以上方式是虽然能解决base库冲突的问题,但是由于base库更新了,导致第三方的上层的旧版本push库依赖不能兼容更新以后的base库,最终只能第三方更新华为push库。