使用不同版本的Android支持库的解决方法



这是指在build.gradle文件中出现的警告消息:

所有com.android.support库必须使用完全相同的版本 规格(混合版本可能导致运行时崩溃)

我很清楚这一点,并在我自己的代码/构建中使用相同的版本。但是,当涉及到我使用的某些第三方库时,情况并非如此。

有时第三方库会使用较旧版本,而其他一些版本则使用较新版本 - 因此更新您的支持库版本将无法解决问题。

在某些情况下,您可能不想升级您正在使用的支持库的升级版本。

重新编译的第三方库带有不同版本的支持库,也不是一个选项,因为我的情况不可用。

当其他引用的第三方库使用不同版本的支持库时,处理此方法的解决方法或建议的方法是什么?

您可以排除所有及物依赖项,或者仅一一个,然后将所需版本包括在build.gradle文件中。

方法1-排除LIB的所有依赖项

使用transitive字段告诉Gradle您不希望解决 transitive 依赖关系。transitive的文档说:

设置该依赖性是否应解决,包括或排除其传递依赖性。属于这种依赖的文物本身可能对其他人工制品具有依赖性。后者称为传递依赖性。

示例:

compile('com.super.lib:awesome@aar') {
    transitive = false
}

方法2-选择您不想包括

的依赖项

使用exclude方法:

添加了一个排除规则,以排除此依赖关系的传递依赖性。

示例:

compile('com.super.lib:awesome@aar') {
    exclude group: 'com.dont.want.this', module: 'old-artifact'
}
但是,请注意,这不能保证不会由其他依赖性提出排除的依赖性。如果您想将依赖性排除到任何地方,请使用范围内的排除策略:
configurations.all {
    exclude group: 'com.dont.want.this', module: 'old-artifact'
}

另外,您不需要指定groupmodule名称。此示例来自Gradle的Javadoc:

dependencies {
     compile('org.hibernate:hibernate:3.1') {
         //excluding a particular transitive dependency:
         exclude module: 'cglib' //by artifact name
         exclude group: 'org.jmock' //by group
         exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
     }
}

警告

只是关于更改依赖版本号的危险的友好提醒。

当您使用此技术更改依赖版本时,您必须彻底测试该应用程序,因为依赖项的较新/旧版本可能会发生破坏的变化或意外行为。很明显,A 主要版本编号跳跃可能会导致崩溃/意外行为,但是您必须注意版本号的 patch 部分,因为Lib Creator可能已经期望依赖性的使用版本有一些错误,并包括一些修复程序,这些修复程序可能会在错误修复后破坏LIB。

相关内容

最新更新