问题
升级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
与之对应。