Android支持库不兼容

时间:2017-09-29 01:39:49

标签: android android-gradle android-support-library android-library

我有一个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),但这些库没有问题。我是否以某种方式不正确地设计了图书馆?

2 个答案:

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

这就是它的含义:

  1. 卡片视图库对其他支持库没有任何(运行时)依赖性,因此在技术上在这种情况下使用不同版本是安全的。但是,这可能随时发生变化。
  2. 更重要的是,您自己的代码没有将cardview-v7定义为依赖项,因此Gradle无法知道它应该提取更新版本。
  3. 最简单的修复就是在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,所以依赖关系会被静默升级。