我有一个jcenter库https://github.com/FluidTYPO3/flux/issues/1442我开发了我导入到我的应用程序中。在我的应用中切换到支持26.1.0后,我收到此错误:
所有com.android.support库必须使用完全相同的版本 规范(混合版本可能导致运行时崩溃)。发现 版本26.1.0,25.3.1
的ToggleButtons:
com.android.support:cardview-v7:25.3.1
主要应用:
com.android.support:design:26.1.0
我正在使用Glide之类的其他库,甚至可以引用早期版本的支持库(我尚未升级到4),但这些库没有问题。我是否以某种方式不正确地设计了图书馆?
答案 0 :(得分:1)
这始终是一个建议,现在他们正在制造错误。
您绝对无法使用这两个版本运行应用程序,因为这会导致重复的类错误。这意味着你必须现在手动选择其中一个,而之前的gradle会自动为你选择一个。
我建议您使用更高的数字,因为相反的风险会丢失库或应用程序真正依赖的新功能/资产。
您可以在应用程序/库模块build.gradle
中的android和dependencies块之间添加此项,以解决您必须手动解决的每个冲突:
def supportLibraryVersion = '26.0.1'
configurations.all {
resolutionStrategy {
force "com.android.support:cardview-v7:$supportLibraryVersion"
}
}
我想你会明白它是如何运作的。
编辑: 正如@ eugen-pechanec所指出的,最佳做法是在所有项目模块中使用相同版本的所有支持库。此外,最好在构建工具上使用相同的数字(在模块的build.gradle中,在android块内)。
答案 1 :(得分:1)
以下是您的应用所依赖的内容:
+ design:26.1.0
+ appcompat-v7:26.1.0
+ support-v4:26.1.0
+ recyclerview-v7:26.1.0
+ support-v4:26.1.0
以下是图书馆所依赖的内容:
+ cardview-v7:25.3.1 (i.e. at least 25.3.1)
这就是它的含义:
cardview-v7
定义为依赖项,因此Gradle无法知道它应该提取更新版本。最简单的修复就是在build.gradle中定义依赖项:
def supportLibraryVersion = '26.0.1'
compile "com.android.support:cardview-v7:$supportLibraryVersion"
否force
,没什么特别的。升级依赖项不是问题。 Only downgrading is.
我仍然不明白为什么Glide在使用支持25时不会抛出此错误。
如上所述,Glide至少使用 <{em> support-v4
25.x.x.并且因为您自己的模块已经请求了更新版本的support-v4
,所以依赖关系会被静默升级。