android第三方库导致support版本冲突解决方案

问题

升级compileSdk版本到26,同时修改了support包的版本,报错

all com.android.support libraries must use the exact same version specification(mixing versions can lead to runtime crashes)

也就是说有引入的第三方库和目前编译版本有冲突。

解决

一般这种问题解决方案是,在指定的有冲突的库的依赖处,添加 exclude group: 'com.android.support',可以将冲突库不包含在编译,如

compile('xx.xxx.xxxxx:xxxxx:1.5.5') {
    exclude group: 'com.android.support'
}

但是问题是我不知道哪个第三方库冲突,不可能一个个检查吧?

这时候只需要在gradle文件中添加如下代码,让所有的第三方包强制使用指定版本的support包:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '26.1.0'
            }
        }
    }
}   

以及在自己写第三方库给别人用的时候,对于support包的依赖方式改成provided(或者compileOnly,gradle3.0),这样不会把support
打包,方便使用的人。

关于gradle3.0更多

gradle升级到3.0后,依赖的方式变得更多了,最显著的变化就是,之前一直用的compile可以替换为implementation, 如

implementation 'xx.xxx.xxxxx:xxxxx::1.5.5'

implementation是指引入依赖,这个第三方包引入的东西,你在项目里无法使用,有点接口的味道,屏蔽内部实现。可以加快gradle编译的速度。

同样的对于 debugcompile releasecompile 都有debug implementation release implementation 与之对应。

猜你喜欢

转载自blog.csdn.net/c_j33/article/details/79171579