美文网首页
Gradle 版本依赖错误

Gradle 版本依赖错误

作者: Leon_hy | 来源:发表于2019-07-23 16:31 被阅读0次
今天在依赖第三方库 'com.android.support:design'时报错,当前版本是28.0.0,但是第三方库里面使用的是27.0.2,编译时出现错误
Android dependency 'com.android.support:design' has different version for the compile (27.0.2)
and runtime (28.0.0) classpath. You should manually set the same version via DependencyResolution”

这个日志已经写的很清楚了,就是com.android.support:design 这个依赖库有两个不同的编译版本,我们应该依赖的版本是同样的,但是自己看了下自己的gradle文件里面明明就只依赖了一个com.android.support:design:27.1.0这个版本啊,怎么就有多个版本了呢?那肯定是自己依赖的库里面又依赖了这个support:appcompat的库,其实如果一个个的找到底是哪个依赖库也用了这个support:design库,那么会很麻烦,那么有没有一种方式就是直接指定所有的库都使用同一个版本,那么由于依赖库多而导致的版本不一致的问题不就迎刃而解了么?答案是肯定的:有。

是有方法设置依赖库的版本的,针对上面的support:design 库我们可以像下面一样子来指定自己所依赖的版本:

configurations.all {
    //循环一个个的依赖库
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        //获取当前循环到的依赖库
        def requested = details.requested
        //如果这个依赖库群组的名字是com.android.support
        if (requested.group == 'com.android.support') {
            //且其名字不是以multidex开头的
            if (!requested.name.startsWith("multidex")) {
                //这里指定需要统一的依赖版本
                details.useVersion '28.0.0'
            }
        }
    }
}

上面注释写的也比较明白,其实原理就是在编译时候指定了一个群组的依赖库的版本,当然如果自己有需要也可以设置某一个依赖库的依赖版本,稍微解释下群组概念:'com.android.support:design:28.0.0',前面的com.android.support是群组名称,因为android有很多support库,后面的design是具体库的名字,而28.0.0则是版本号,所以上面那段用Groovy写的代码的意思就是除了support里面的multidex库其他的都统一用28.0.0版本号。
有些同学说我不想指定一个群组的只想指定某一个库的可以吗?当然可以 ,只不过上面的判断只用requested.name来判断就好了,不过这个可能有个隐藏问题,就是如果两个不同的群组下面有名字相同的库就麻烦了,不过这种情况发生的概率比较小。

相关文章

网友评论

      本文标题:Gradle 版本依赖错误

      本文链接:https://www.haomeiwen.com/subject/sdralctx.html