有一个依赖于 lib 的应用程序,该 lib 具有依赖关系:
api "com.google.android.gms:play-services:11.0.2"
在它想要使用的这个应用程序中com.google.android.gms:play-services-maps:15.0.1
,所以它做了这些是gradle:
implementation ('com.google.android.gms:play-services-maps:15.0.1') { force = true }
这会触发下载以及
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (details.requested.group == 'com.google.android.gms' && requested.name.contains('play-services-maps')) {
details.useVersion "15.0.1"
}
/*
// this causes build error that cannot relsove the xxx-15.0.0
//
if (requested.name.contains('play-services')
&& VersionNumber.parse(requested.version) < VersionNumber.parse(15.0.0)
) {
details.useVersion "15.0.0"
}
*/
}
}
在依赖图中,它显示:
dogfoodRuntimeClasspath - Dependencies for runtime/packaging
+--- com.google.android.gms:play-services-maps:15.0.1@aar
但是在运行时仍然在它引用的地方崩溃LatLng
NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/maps/model/LatLng
这是从play-services-maps:15.0.1
问题1:为什么会这样,如何强制使用15.0.1版本?
2:似乎没有人依赖"com.google.android.gms:play-services:15.0.0"
,部分:
/*
// this causes build error that cannot relsove the xxx-15.0.0
//
if (requested.name.contains('play-services')
&& VersionNumber.parse(requested.version) < VersionNumber.parse(15.0.0)
) {
details.useVersion "15.0.0"
}
*/
会找到requested.version==11.0.2并尝试用15.0.0替换,但这会导致无法解析play-service-xxx:15.0.0的失败。
是不是因为resolutionStrategy
只替换了版本号而不会下载文件?