[英]AAR Library Transitive dependencies conflict?
我正在使用在本地Maven存储库中发布的aar。 由于我想包括传递性依赖项,因此我将transitive
属性添加到依赖项中:
compile ('com.mycompany.domain:artifact:1.0.0@aar') {
transitive = true
}
现在,假设这个项目添加了对cardView支持库v23的依赖:
compile "com.android.support:cardview-v7:23.4.0"
如果我还添加了对v24 cardView库的依赖关系,我的apk发布文件会如何处理:
compile "com.android.support:cardview-v7:24.0.0"
Gradle是否能够管理这种双重依赖并采用最新的依赖而不产生冲突? 还是在不使用transitive
属性的情况下手动指定安全性是比较安全的。
另外,可transitive
属性是否还会导入aar可能设置的proGuard规则?
谢谢您的帮助,
只是添加一些细节。
您正在使用@aar
表示法。
这意味着您只想下载aar工件,而没有依赖项。
您可以检查[documentation] [1]的这一部分:
检查1.4.1.2. Artifact only notation
1.4.1.2. Artifact only notation
部分:
仅工件的符号创建了模块依赖性,该模块依赖性仅下载具有指定扩展名的工件文件。 现有模块描述符将被忽略 。
如果要下载依赖项,请使用@aar
表示法,应添加transitive=true
,否则可以省略@aar,并且无需添加transitive属性即可使用。
关于依赖关系。
Gradle将自动管理依赖项。
使用默认配置,gradle将下载最新版本。
无论如何,您还可以在build.gradle
排除依赖build.gradle
。
compile('mylibrary:1.0.0') {
//excluding a particular transitive dependency:
exclude module: 'xxx' //by artifact name
exclude group: 'xxx.xxx' //by group
exclude group: 'xxx.xxxx', module: 'xxxx' //by both name and group
//disabling all transitive dependencies of this dependency
transitive = false
}
我在Gradle官方文档中找到了答案: Gradle Depedency Management链接
Gradle Dependency求解器会自动执行此操作。 Gradle提供的两种主要的冲突解决策略是:
最新:使用最新版本的依赖项。 这是Gradle的默认策略,只要版本向后兼容,通常是一个适当的选择。
失败:版本冲突导致构建失败。 此策略要求在构建脚本中显式解决所有版本冲突。 有关如何显式选择特定版本的详细信息,请参见ResolutionStrategy。
另外,对于ProGuard,如果在库中使用以下声明进行了声明,则应导出规则( 有关更多详细信息,请参见此答案 ):
defaultConfig {
consumerProguardFiles 'proguard-rules.txt'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.