摇篮。编译(x.x.x)和打包(y.y.y)的已解决版本不同

时间:2017-03-02 14:02:06

标签: android cordova gradle dependency-management

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.

是什么原因?或者您可能知道解决依赖冲突的更好方法吗?

2 个答案:

答案 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
            }
        }
    }
}