2

我正在使用在本地 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 规则?

谢谢您的帮助,

4

2 回答 2

3

只是添加一些细节。

您正在使用该@aar符号。
这意味着您只想下载 aar 工件,而没有依赖项。
您可以查看 [documentation][1] 的这一部分:
查看以下1.4.1.2. Artifact only notation部分:

仅工件表示法创建一个模块依赖项,它仅下载具有指定扩展名的工件文件。现有的模块描述符被忽略

@aar如果要下载依赖项,请使用该符号,您应该添加transitive=true,否则您可以省略 @aar 并且它会在不添加传递属性的情况下工作。

关于依赖关系。
Gradle 将自动管理依赖项。
使用默认配置,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
 }
于 2016-06-21T07:59:06.660 回答
0

我在 Gradle 官方文档中找到了答案:Gradle 依赖管理链接

Gradle 依赖求解器会自动完成。Gradle 提供的两种主要的冲突解决策略是:

最新:使用最新版本的依赖项。这是 Gradle 的默认策略,只要版本向后兼容,这通常是一个合适的选择。

失败:版本冲突导致构建失败。此策略要求在构建脚本中明确解决所有版本冲突。有关如何明确选择特定版本的详细信息,请参阅 ResolutionStrategy。

此外,关于 ProGuard,如果在库中使用以下声明声明规则,则应导出规则(有关详细信息,请参阅此答案):

defaultConfig {
    consumerProguardFiles 'proguard-rules.txt'
}
于 2016-06-20T18:10:13.483 回答