繁体   English   中英

AAR库的传递依赖项有冲突吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM