这是指在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'
}
另外,您不需要指定group
和module
名称。此示例来自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。