cordova中有很多插件,其中很多都使用谷歌播放服务。每个插件都想使用一些特殊版本的播放服务。真的很烦人。
要解决此问题,我尝试在graddle中创建简单的依赖项版本解析程序。它应该从一些插件依赖项(我的意思是播放服务版本)获得所需的版本,并为其他插件依赖项设置相同的版本。
这是我的剧本:
def right_version = "9+";
configurations.all{
resolutionStrategy{
eachDependency { DependencyResolveDetails details ->
if (details.requested.name.contains('play-services') && details.requested.version != '9+') {
right_version = details.requested.version
}
}
eachDependency { DependencyResolveDetails details ->
if ( details.requested.name.contains('play-services') ){
details.useVersion right_version
}
}
}
}
它工作正常,但有一点问题。我收到如下错误:
Conflict with dependency 'com.google.android.gms:play-services-ads'. Resolved versions for compilation (10.2.0) and packaging (9.8.0) differ. This can generate runtime errors due to mismatched resources.
是什么原因?或者您可能知道解决依赖冲突的更好方法吗?
答案 0 :(得分:0)
如果您使用此ide进行开发,请确保您未在Android工作室中脱机。您可以将其检查为文件>设置>构建,执行,部署> Gradle 。 其次,如果您使用命令行工具或Android工作室,则必须将Google Play服务更新为应用程序或应用程序的 build.gradle 中的最新版本,例如 将'com.google.android.gms:play-services-location:9.2.0'编译为最新版本 编译'com.google.android.gms:play-services-location:10.2.0'。 您可以从此处的列表中选择特定版本的播放服务API而不是完整的Google Play服务包[https://developers.google.com/android/guides/setup][1]
答案 1 :(得分:0)
最后,我找到了问题的根源。使用eachDependency两次并在第二次使用中更改版本是个坏主意。看来,在第一个依赖关系之后,依赖关系会被批准(或类似的东西)。因此,使用以下代码完成所有工作:
def right_version = "9+";
configurations.all{
dependencies.all{ Dependency d ->
def right_version_copy = right_version
if(d.getName().contains("play-services") && d.getVersion() != right_version_copy){
right_version = d.getVersion()
}
}
resolutionStrategy{
eachDependency { DependencyResolveDetails details ->
if ( details.requested.name.contains('play-services') ){
details.useVersion right_version
}
}
}
}